Redis的5種數(shù)據(jù)結(jié)構(gòu)

Redis中有5種數(shù)據(jù)結(jié)構(gòu),分別是string(字符串)、list(鏈表)、set(無(wú)序集合)、hash(健值對(duì))和zset(有序集合)

1. string字符串

跟其他語(yǔ)言中的字符串一樣,形如key value,如hello world, hello是key, world是值。

操作命令
命令 行為
set 設(shè)置在給定鍵的值
get 獲取指定鍵的值
del 刪除給定鍵的所有值(通用命令,適合任何數(shù)據(jù)結(jié)構(gòu))
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

2. list鏈表

一個(gè)列表結(jié)構(gòu)可以有序的存儲(chǔ)多個(gè)值,就跟數(shù)據(jù)結(jié)構(gòu)中的鏈表一樣


image.png

值可以重復(fù)

操作命令
命令 行為
rpush/lpush 將給定的值從右邊/左邊推入到鏈表中
rpop/rpush 將給定的值從鏈表的右邊/左邊推出
lrange 獲取鏈表中給定范圍的值
lindex 獲取鏈表中給定位置的單個(gè)值
127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list 0 -1
(empty list or set)
127.0.0.1:6379> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lindex list-key 0
"item"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -2
1) "item2"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"
127.0.0.1:6379> rpop list-key
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"

3. set集合(無(wú)序不重復(fù))

跟Java中的set集合一樣無(wú)序不重復(fù)

image.png

操作命令
操作 命令
sadd 將值插入到給定的集合中
smembers 獲取集合中所有的值
sismember 檢查值是否在集合中
srem 移除集合中的這個(gè)值
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item2"
3) "item"
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item4
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item"

4. hash 散列

Redis的散列可以存儲(chǔ)多個(gè)健值對(duì),跟字符串一樣,散列的值可以存儲(chǔ)字符串和數(shù)字。


image.png

hash-key是一個(gè)存儲(chǔ)了倆個(gè)健值對(duì)的散列

操作命令
命令 行為
hset 給指定散列填充健值對(duì)
hget 獲取指定散列的指定健值對(duì)
hdel 刪除指定散列中指定的健值對(duì)
hgetall 獲取指定散列的所有健值對(duì)
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
127.0.0.1:6379> hset hash-key sub-key1 value2
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hget hash-key sub-key2
"value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key2
(nil)
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value2"

hset時(shí)散列中的鍵對(duì)應(yīng)的值會(huì)覆蓋

5. 有序集合

有序集合和散列一樣都是存儲(chǔ)的健值對(duì),不一樣的是,有序集合的值只能是浮點(diǎn)數(shù),有序集合的鍵稱之為成員,值稱之為分值

image.png

zset-key是一個(gè)有兩個(gè)健值對(duì)的集合

操作命令
命令 行為
zadd 給指定集合添加已知分值的成員
zrange 根據(jù)順序范圍獲取成員(0 -1)是全部
zrangebyscore 根據(jù)分值范圍獲取成員
zrem 移除集合中指定成員
127.0.0.1:6379> zadd zset-key 728 member
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1
1) "member"
2) "member0"
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member"
2) "728"
3) "member0"
4) "982"
127.0.0.1:6379> zrange zset-key 0 800 withscore
(error) ERR syntax error
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores
1) "member"
2) "728"
127.0.0.1:6379> zrem zset-key member
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

zadd時(shí)在同一個(gè)有序集合中相同的成員分值會(huì)被覆蓋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容