1. 程式人生 > >redis常見資料型別

redis常見資料型別

1 redis簡介

redis是一個開源的、使用C語言編寫的、支援網路互動的、可基於記憶體也可持久化的Key-Value資料庫。

1.1 redis和memcached對比

對比項 Memcached Redis
型別 Key-value資料庫 Key-value資料庫
過期策略 支援 支援
資料型別 單一資料型別 多種資料型別
持久化 不支援 支援
主從複製 不支援 支援
虛擬記憶體 不支援 支援(不建議使用)

1.2 安裝redis

配置repo,yum安裝redis

[[email protected] ~]# wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
[
[email protected]
~]# yum install redis -y [[email protected] ~]# rpm -qa redis # 這個版本的可以有命令用法提示,可TAB補全 redis-3.2.12-1.el6.x86_64 [[email protected] ~]# rpm -ql redis

修改bind為本地ip地址

[[email protected] ~]# vim /etc/redis.conf
bind 10.0.0.10

啟動redis

[[email protected] ~]# /etc/init.d/redis start
啟動 :                                                    [確定]
[
[email protected]
~]# lsof -i :6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 6844 redis 4u IPv4 46720 0t0 TCP 10.0.0.10:6379 (LISTEN)

2 Redis的資料型別

2.1 字串型別(Strings)

命令 作用
SET key value [EX seconds] [PX milliseconds] [NX|XX] 設定Key
GET key 獲取Key的值
EXISTS key [key ...]
判斷Key是否存在
KEYS pattern 顯示所有的Key
DEL key [key ...] 刪除指定的Key
TYPE key 獲取Key的型別
APPEND key value 追加內容到value
STRLEN key 獲取字串Key的長度
MGET key [key ...] 獲取多個Key
MSET key value [key value ...] 設定多個Key
INCR key 自增
INCRBY key increment 指定步長的自增
DECR key 自減
DECABY key decrement 指定步長的自減
INCRBYFLOAT key increment 自增浮點型別
[[email protected] ~]# redis-cli -h 10.0.0.10
10.0.0.10:6379> set key value [EX seconds] [PX milliseconds] [NX|XX]
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> get mykey  # 獲取key
"RSQ"
10.0.0.10:6379> keys *	# 獲取當前所有key,生產慎用,相當於遍歷整個資料庫,若資料過多會影響效能
1) "mykey"
10.0.0.10:6379> EXISTS mykey   # 判斷某一key是否存在,存在為1,否則為0
(integer) 1
10.0.0.10:6379> EXISTS mykeykey
(integer) 0
10.0.0.10:6379> DEL mykey	# 刪除key
(integer) 1
10.0.0.10:6379> EXISTS mykey
(integer) 0
10.0.0.10:6379> set mykey RSQ	
OK
10.0.0.10:6379> TYPE mykey	# 檢視key資料型別
String
10.0.0.10:6379> set mykey RSQ
OK
10.0.0.10:6379> APPEND mykey RSQ	# 追加key
(integer) 6
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> STRLEN mykey		# 檢視key長度
(integer) 6
10.0.0.10:6379> INCR num			# 自增,用於計數
(integer) 1
10.0.0.10:6379> GET mykey
"RSQRSQ"
10.0.0.10:6379> get num
"1"
10.0.0.10:6379> INCR num
(integer) 2
10.0.0.10:6379> get num
"2"
10.0.0.10:6379> INCR num
(integer) 3
10.0.0.10:6379> INCR num
(integer) 4
10.0.0.10:6379> INCR num
(integer) 5
10.0.0.10:6379> INCR num
(integer) 6
10.0.0.10:6379> get num
"6"
10.0.0.10:6379> INCRBY num 5		# 指定自增步長
(integer) 11
10.0.0.10:6379> get num
"11"
10.0.0.10:6379> DECR num			# 自減
(integer) 10
10.0.0.10:6379> DECR num
(integer) 9
10.0.0.10:6379> DECR num
(integer) 8
10.0.0.10:6379> DECR num
(integer) 7
10.0.0.10:6379> get num
"7"
10.0.0.10:6379> DECRBY num 5		# 指定自減步長,支援負數
(integer) 2
10.0.0.10:6379> DECRBY num 5
(integer) -3
10.0.0.10:6379> DECRBY num 5
(integer) -8
10.0.0.10:6379> MSET key1 R1 key2 R2 key3 R3   # 設定多個key
OK
10.0.0.10:6379> keys *
1) "key1"
2) "key3"
3) "mykey"
4) "num"
5) "key2"
10.0.0.10:6379> MGET key1 key2 key3			# 獲取多個key
1) "R1"
2) "R2"
3) "R3"

2.2 雜湊型別(Hashes)

命令 作用
HSET key field value 設定hash裡面一個欄位的值
HGET key field 獲取hash中field的值
HMSET key field value [field value ...] 設定多個hash欄位值
HMGET key field [field ...] 獲取多個hash中field的值
HGETALL key 從hash中讀取全部的域和值
HDEL key field [field ...] 刪除一個或多個hash中的field
10.0.0.10:6379> HSET car name BMW		# 設定hash值
(integer) 1
10.0.0.10:6379> HSET car price 500		
(integer) 1
10.0.0.10:6379> HGET car				# 獲取鍵的field域值,不能直接跟鍵,會報錯
(error) ERR wrong number of arguments for 'hget' command
10.0.0.10:6379> HGET car name
"BMW"
10.0.0.10:6379> HGET car price
"500"
10.0.0.10:6379> HMGET car name price
1) "BMW"
2) "500"
10.0.0.10:6379> HSET car price 10000
(integer) 0
10.0.0.10:6379> HGET car price
"10000"
10.0.0.10:6379> HMSET book name flower price 20	# 可以設定多個鍵的域
OK
10.0.0.10:6379> HMGET book name price			#獲取多個鍵的域
1) "flower"
2) "20"
10.0.0.10:6379> HMGET book price name
1) "20"
2) "flower"
10.0.0.10:6379> HGETALL book		# 獲取一個鍵的所有fields及values
1) "name"
2) "flower"
3) "price"
4) "20"
10.0.0.10:6379> HDEL car name		# 刪除鍵的field
(integer) 1
10.0.0.10:6379> HGETALL car
1) "price"
2) "10000"
10.0.0.10:6379> HEXISTS car price	# 檢視此hash 鍵的field是否存在
(integer) 1
10.0.0.10:6379> HEXISTS car name
(integer) 0

2.3 列表(Lists)

在這裡插入圖片描述

命令 作用
LPUSH key value [value ...] 從佇列的左邊入隊一個或多個元素
RPUSH key value [value ...] 從佇列的右邊入隊一個或多個元素
LPOP key 從佇列的左邊彈出一個元素
RPOP key 從佇列的右邊彈出一個元素
LRANGE key start stop 從列表中獲取指定返回的元素
LREM key count value 從列表中刪除元素
10.0.0.10:6379> LPUSH list R1
(integer) 1
10.0.0.10:6379> LPUSH list R2
(integer) 2
10.0.0.10:6379> LPUSH list R3
(integer) 3
10.0.0.10:6379> LPUSH list R4
(integer) 4
10.0.0.10:6379> LLEN list
(integer) 4

# 會顯示右側序列為1的到序列為3範圍內的,右側第一的數的序列為0
10.0.0.10:6379> LRANGE list 1 3
1) "R3"
2) "R2"
3) "R1"

# 左右彈出資料
10.0.0.10:6379> LPOP list
"R4"
10.0.0.10:6379> LPOP list
"R3"
10.0.0.10:6379> RPOP list
"R1"
10.0.0.10:6379> RPOP list
"R2"

# 左右push資料
10.0.0.10:6379> LPUSH list 1
(integer) 1
10.0.0.10:6379> LPUSH list 2
(integer) 2
10.0.0.10:6379> RPUSH list 3
(integer) 3
10.0.0.10:6379> RPUSH list 4
(integer) 4

# 此時在此列表中資料從左至右為2134
10.0.0.10:6379> LRANGE list 0 3
1) "2"
2) "1"
3) "3"
4) "4"
10.0.0.10:6379> LINDEX list 0
"2"
10.0.0.10:6379> LINDEX list 1
"1"
10.0.0.10:6379> LINDEX list 2
"3"
10.0.0.10:6379> LINDEX list 3
"4"
10.0.0.10:6379> LINDEX list -1
"4"
10.0.0.10:6379> LINDEX list -2
"3"
10.0.0.10:6379> LINDEX list -3
"1"
10.0.0.10:6379> LINDEX list -4
"2"

值與位置的一一對應關係

k1 k2 k3 k4
3 2 1 0
-1 -2 -3 -4

下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

2.4 集合(Sets)

命令 作用
SADD key member [member ...] 新增一個或多個元素到集合(set)裡
SREM key member [member ...]
SMEMBERS key 獲取集合裡面的所有元素
SDIFF key [key ...] 獲取佇列不存在的元素,差集
SINTER key [key ...] 獲取兩個集合的交集
SUNION key [key ...] 獲取兩個集合的並集
SCARD key 獲取集合裡面的元素數量
SDIFFSTORE destination key [key ...] 獲得兩個集合的差集,並存儲在一個關鍵的結果集
SINTERSTORE destination key [key ...] 獲得兩個集合的交集,並存儲在一個關鍵的結果集
SUNIONSTORE destination key [key ...] 獲得兩個集合的並集,並存儲在一個關鍵的結果集
10.0.0.10:6379> SADD word1 a		# 新增集合資料
(integer) 1
10.0.0.10:6379> SADD word1 a b c
(integer) 2
10.0.0.10:6379> SADD word1 a b c d e
(integer) 2
10.0.0.10:6379> SREM word1 e		# 刪除集合資料
(integer) 1
10.0.0.10:6379> SMEMBERS word1    # 檢視集合資料
1) "c"
2) "a"
3) "b"
4) "d"
10.0.0.10:6379> SISMEMBER word1 b  # 判斷指定元素是否存在於集合中
(integer) 1
10.0.0.10:6379> SISMEMBER word1 e
(integer) 0
10.0.0.10:6379> SADD word2 1 2 3 
(integer) 3
10.0.0.10:6379> SADD word3 2 3 4
(integer) 3
10.0.0.10:6379> SDIFF word2 word3  # 差集
1) "1"
10.0.0.10:6379> SDIFF word3 word2  
1) "4"
10.0.0.10:6379> SINTER word2 word3  # 交集
1) "2"
2) "3"
10.0.0.10:6379> SUNION word2 word3  # 並集
1) "1"
2) "2"
3) "3"
4) "4"
10.0.0.10:6379> SCARD word1   # 統計集合中元素的個數
(integer) 4
10.0.0.10:6379> 
10.0.0.10:6379> SCARD word2
(integer) 3
10.0.0.10:6379> SCARD word3
(integer) 3
10.0.0.10:6379> SDIFFSTORE haha word2 word3    # 獲取兩個集合的交集並存儲在一個關鍵集中
(integer) 1
10.0.0.10:6379> TYPE haha
set
10.0.0.10:6379> SCARD haha
(integer) 1
10.0.0.10:6379> SMEMBERS haha
1) "1"
10.0.0.10:6379>

2.5 有序集合(Sorted sets)

命令 作用
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] 新增到有序set的一個或多個成員,如果它已經存在會更新分數
ZSCORE key member 獲取成員在排序設定相關的比分
ZRANGE key start stop [WITHSCORES] 根據指定的index返回有序集合的成員列表
10.0.0.10:6379> ZADD test 1 zhang 2 wang 3 li
(integer) 3
10.0.0.10:6379> ZSCORE test zhang
"1"
10.0.0.10:6379> ZSCORE test wang
"2"
10.0.0.10:6379> ZSCORE test li
"3"
10.0.0.10:6379> ZRANGE test 0 -1  # 0代表第一個,-1代表最後一個,故0 -1能顯示全部資料
1) "zhang"
2) "wang"
3) "li"
10.0.0.10:6379> ZRANGE test 2 3
1) "li"
10.0.0.10:6379> ZRANGE test -2 -1
1) "wang"
2) "li"

值與位置對應關係

zhang wang li
0 1 2
-1 -2 -3