Redis筆記-5種數據結構

Redis筆記-5種數據結構與操作

Redis 支持5種數據結構與操作

結構類型 結構存儲的值 結構的讀寫能力
String 可以是字符串、整數或者是字符串 對字符串操作,整數自增,自減
LIST 鏈表,鏈表的每個節點都包含一個字符串 鏈表兩端推入節點插入,刪除;
根據偏移量進行修剪(trim);
讀取單個或多個元素;
根據值查找或移除節點;
SET 集合,無序,唯一 。對應: List < String > 添加,刪除,獲取,判斷是否存在;
計算交集、並集、差集;
隨機獲取一元素;
HASH 鍵值對,無序,key唯一 對應 HashMap<String,String> 添加,獲取,移除單個鍵值;
獲取整個鍵值對
ZSET 鍵(member)值(score)對,有序,根據 值(score)的大小進行排序 添加,獲取,刪除;
根據範圍(Range)獲取成員

示例操作

一:String

1)添加(set [key] [值] ,key存在時,則更新)

127.0.0.1:6379> set name1 richy
OK

2)查看(get [key] )

127.0.0.1:6379> get name1
“richy”

3)刪除(del [key])

127.0.0.1:6379> del name1
(integer) 1

4)更改 (getset [key] )

127.0.0.1:6379> getset name1 richyliu
“richy”

PS:key不存在時,自動創建,並返回舊值感覺跟set實際是一個樣。。

5)獲取多個值(mget)

127.0.0.1:6379> mget name1 name2

  1. “richyliu2”
  2. “wa”

6)將值加到後面 (append [key] [value])

127.0.0.1:6379> append name2 liu
(integer) 5

7)獲取字符長度 (strlen [key])

127.0.0.1:6379> strlen name1
(integer) 9

PS:返回值爲最終字符串長度

8)數值加 (incr [key])

127.0.0.1:6379> incr age1
(integer) 11

PS:返回值爲最終值

9)數值加 (decr [key])

127.0.0.1:6379> decr age1
(integer) 10

PS:返回值爲最終值

PS: 還有不少不怎麼常用的,比如:字符偏移量(getbit),浮點自增(減),所有值自增(減)等,想得到的基本上都有對應的命令。下面類型也是一樣,不再複述

二:LIST

1) 左邊(頭)添加值 (lpush [list] [value] [value] [value] )

127.0.0.1:6379> lpush l1 richy
(integer) 1

PS:LIST不存在時創建,如果有多個值 ,以空格隔開 ,多個值時 index 排在最後的最靠前,如下:

127.0.0.1:6379> lpush l3 a b c d e f
(integer) 6
127.0.0.1:6379> lindex l3 0
“f”

2) 右邊(尾)添加值 (rpush [list] [value] )

127.0.0.1:6379> rpush l8 richy
(integer) 3
127.0.0.1:6379> lindex l8 2
“richy”
127.0.0.1:6379>

3)獲取值 (lindex [list] [index] )

127.0.0.1:6379> lindex l1 0
“richy”

4)移出並獲取列表的第一個元素 (lpop [list [index] )

127.0.0.1:6379> lpop l1
“richy”

5)移出並獲取列表的最後一個元素 (rpop [list] [index] )

127.0.0.1:6379> rpop l1
“richy”

6)獲取長度 (llen [list] [index] )

127.0.0.1:6379> llen l3
(integer) 6

7)移除值 (lrem [list] [count] [value] )

127.0.0.1:6379> lpush l3 e e e e e e e e
(integer) 8
127.0.0.1:6379> lrem l3 3 e
(integer) 3
127.0.0.1:6379> lrem l3 3 e
(integer) 3
127.0.0.1:6379> lrem l3 3 e
(integer) 2

PS:返回值爲移除掉的數量

8)移除列表的最後一個元素,並將該元素添加到另一個列表並返回 ( rpoplpush [source] [destination] )

127.0.0.1:6379> lpush l4 1 2 3 4 5 (插入後實際順序是:5 4 3 2 1 )前面有講到
(integer) 5
127.0.0.1:6379> rpoplpush l4 l5 (第一次)
“1”
127.0.0.1:6379> llen l4
(integer) 4
127.0.0.1:6379> llen l5
(integer) 1
127.0.0.1:6379> rpoplpush l4 l5 (第二次)
“2”
127.0.0.1:6379> llen l4
(integer) 3
127.0.0.1:6379> llen l5
(integer) 2

127.0.0.1:6379> lindex l5 0
“2”
127.0.0.1:6379>

PS:通過兩次的插入實踐證明這個邏輯:從l4取出第1個值 插入l5的最後。 l4數量減少,l5數量增加

9)從列表中取出最後一個元素,並插入到另外一個列表的頭部; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止。 ( brpoplpush [source] [destination] [expire(秒)])

127.0.0.1:6379> lpush l6 1 2 3 #插入3個元素, 順序爲 3 2 1
(integer) 3
127.0.0.1:6379> brpoplpush l6 l7 10 第一次,取l6最後一元素,插入l7頭部
“1”
127.0.0.1:6379> brpoplpush l6 l7 10 第二次
“2”
127.0.0.1:6379> lindex l7 0
“2”
127.0.0.1:6379> brpoplpush l6 l7 10 第三次
“3”
127.0.0.1:6379> brpoplpush l6 l7 10 第四次,因爲沒有元素,進入等待
(nil)
(10.03s)

10)賦值 ( lset [list] [index] [value])

127.0.0.1:6379> lset l8 0 abc
OK

三:SET

1)賦值 ( sadd [set] [value1] [value2] [value3]) ,多個值 以空格隔開

127.0.0.1:6379> sadd s1 1 2 3
(integer) 3

2)隨機彈出 ( spop [set] [count])

127.0.0.1:6379> spop s1 2
“2”
“3”
127.0.0.1:6379> spop s1 1
“1”
127.0.0.1:6379> spop s1 1
(empty list or set)

2)獲取集合數量 (scard [set])

127.0.0.1:6379> scard s1
(integer) 3

3)獲取所有元素 ( smembers [set] )

127.0.0.1:6379> smembers s1
1 ) “c”
2 ) “b”
3 ) “a”

4)獲取集差( sdiff [set1] [set2] )

127.0.0.1:6379> sadd s1 a b c
(integer) 3
127.0.0.1:6379> sadd s2 c d e f
(integer) 4
127.0.0.1:6379> sdiff s1 s2
1 ) “b”
2 ) “a”

5)獲取指定所有集合的交集 (sinter [set] [set2] [set3] )

127.0.0.1:6379> sinter s1 s2
1 ) “c”

6)獲取並集( sunion [set] [set] [set] )

127.0.0.1:6379> sunion s1 s2
1 ) “a”
2 ) “f”
3 ) “e”
4 ) “c”
5 ) “d”
6 ) “b”

7)獲取並集 並存到目標集合 (sunion [destination set] [set1] [set2] )

127.0.0.1:6379> 127.0.0.1:6379> sunionstore s3 s1 s2
(integer) 6
127.0.0.1:6379> smembers s3
1 ) “a”
2 ) “f”
3 ) “e”
4 ) “c”
5 ) “d”
6 ) “b”

8)移動(smove [source][destination] [value] )

127.0.0.1:6379> smove s3 s4 a
(integer) 1 PS:1 移動個數

9)刪除( srem [source] [destination] [value] )

127.0.0.1:6379> srem s1 g
(integer) 1 刪除個數

四:HASH

1)賦值 (hset [table] [key] [value] )

127.0.0.1:6379> hset h1 name richy #當集合不存在時則創建集合再賦值
(integer) 1
127.0.0.1:6379> hset h1 age 18
(integer) 1
127.0.0.1:6379> hset h1 addr guanzhou
(integer) 1

2)多個賦值 ( hmset [table] [col1] [value1] [col2] [value2] )

127.0.0.1:6379> hmset h2 name wa age 17 addr guangzhou
OK

3)獲取表指定字段 (hget [table] [col])

127.0.0.1:6379> hget h2 name
“wa”

4)獲取表多個指定字段 (hmget [表] [col1] [col2] [col3] )

127.0.0.1:6379> hmget h1 name age
1 ) “richy”
2 ) “18”

5)獲取所有字段與值 (hgetall [table] )

127.0.0.1:6379> hgetall h1
1 ) “name”
2 ) “richy”
3 ) “age”
4 ) “18”
5 ) “addr”
6 ) “guanzhou”

6)獲取所有字段名 ( hkeys [table] )

127.0.0.1:6379> hkeys h1
1 ) “name”
2 ) “age”
3 ) “addr”

7)獲取所有值 ( hvals [table] )

127.0.0.1:6379> hvals h2
1 ) “wa”
2 ) “17”
3 ) “guangzhou”

8)獲取長度 ( hlen [table] )

127.0.0.1:6379> hlen h1
(integer) 3

9)刪除值 ( hdel [table] [col1] [col2] )

127.0.0.1:6379> hdel h1 age name
(integer) 2

10)字段自增( hincrby [table] [col] [num] )

127.0.0.1:6379> hincrby h2 age 1
(integer) 18
127.0.0.1:6379> hincrby h2 age 1
(integer) 19
127.0.0.1:6379> hincrby h2 age 2
(integer) 21
127.0.0.1:6379> hincrby h2 age -2
(integer) 19

五:ZSET

1)新增 (zadd [set] [score] [member] )

127.0.0.1:6379> zadd z1 100 richy
(integer) 1
127.0.0.1:6379> zadd z1 90 wa
(integer) 1

2)獲取成員數 ( zcard [member] )

127.0.0.1:6379> zcard z1
(integer) 2

3)獲取區間成員數量 ( zcount [set] [start score] [end score])

127.0.0.1:6379> zcount z1 1 100
(integer) 2

4)返回指定區間成員 zrange[set] [num] [member]

127.0.0.1:6379> zrange z1 1 100
1 ) “richy”

5)自增 ( zrange [set ] [index start] [index end] )

127.0.0.1:6379> zrange z1 0 10
1 ) “wa”
2 ) “richy”

6)通過字典區間返回有序集合的成員 ( zrangebylex [set] [min] [max] )

127.0.0.1:6379> zrangebylex z1 - [wa # [ 表示 閉區間 ,( 表示開區間
1 ) “wa”
2 ) “richy”

7)通過分數區間返回有序集合的成員 ( zrangebyscore [set] [score start] [score end] )

127.0.0.1:6379> zrangebyscore z1 200 400
1 ) “rui”

8) 獲取成員索引 zrank ( [set] [member] )

127.0.0.1:6379> zrank z1 richy
(integer) 1

9) 刪除成員 ( zrem [set] [member] )

127.0.0.1:6379> zrem z1 rui
(integer) 1

10) 刪除成員 ( zrem [set] [member] )

127.0.0.1:6379> zrem z1 rui
(integer) 1

11) 移除有序集合中給定的排名區間的所有成員 ( zremrangebyscore [set] [start score] [end score] )

先插入點數據先

127.0.0.1:6379> zadd z1 120 a 110 b 130 c 140 d
(integer) 4
127.0.0.1:6379> zcard z1
(integer) 6
127.0.0.1:6379> zrangebyscore z1 0 1000
1 ) “wa”
2 ) “b”
3 ) “a”
4 ) “richy”
5 ) “c”
6 ) “d”

測試

127.0.0.1:6379> zremrangebyscore z1 100 120
(integer) 3

12) 移除有序集合中給定的排名區間的所有成員 (zremrangerank [set] [star] [end])

127.0.0.1:6379> zadd z2 120 a 110 b 130 c 140 d
(integer) 4
127.0.0.1:6379> zremrangebyrank z2 0 1
(integer) 2

PS: 如果 [end] 是負數,即表示刪除 排名在【end】之外的成員, 見以下示例

127.0.0.1:6379> zscan z1 0 # 列出所有元素
1 ) “0”
2 ) 1) “k5”
2) “6”
3) “k2”
4) “10”
5) “k3”
6) “10”
7) “k4”
8) “10”
9) “k1”
10 ) “99”
127.0.0.1:6379> zremrangebyrank z1 0 -4 #刪除最後排名在 4之後(包括4)
(integer) 2
127.0.0.1:6379> zscan z1 0 #操作後結果
1 ) “0”
2 ) 1) “k3”
2 ) “10”
3 ) “k4”
4 ) “10”
5 ) “k1”
6 ) “99”

13) 獲取指定排序的成員 ( zrevrange [set] [start index] [end index])

127.0.0.1:6379> zadd z3 120 a 110 b 130 c 140 d 50 f
(integer) 5
127.0.0.1:6379> zrevrange z3 0 10
1 ) “d”
2 ) “c”
3 ) “a”
4 ) “b”
5 ) “f”

總結

五種結構的常用操作都一 一試過。實際上每一種結構都有各自特定的使用場景,不同的結構對應的指令側重點也不同。
STRING 側重於字符的操作。
LIST 側重於插入的順序,使用起來更像是隊列
SET 側試重於集合的計算,交集,並集,差集
HASH 側試重於 鍵值對 使用,可以當成二維表的一段記錄來用。
ZSET 側重於排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章