Redis雜湊與有序集合
前面文章我們介紹了列表與集合中的基本命令,本文我們來看看Redis中的雜湊與有序集合。
本文是Redis系列的第六篇文章,瞭解前面的文章有助於更好的理解本文:
1.Linux上安裝Redis
2.Redis中的五種資料型別簡介
3.Redis字串(STRING)介紹
4.Redis字串(STRING)中BIT相關命令
5.Redis列表與集合
雜湊
很多時候,雜湊就像一個微縮版的redis,在本文中,小夥伴們對看到的許多雜湊命令都會有似曾相識的感覺。
HSET
HSET命令可以用來設定key指定的雜湊集中指定欄位的值,如下:
127.0.0.1:6379> HSET k1 h1 v1
(integer) 1
HGET
HGET命令可以用來返回key指定的雜湊集中該欄位所關聯的值,如下:
127.0.0.1:6379> HGET k1 h1
"v1"
HMSET
HMSET命令可以批量設定key指定的雜湊集中指定欄位的值,如下:
127.0.0.1:6379> HMSET k2 h1 v1 h2 v2 h3 v3
OK
HMGET
HMGET可以批量返回key指定的雜湊集中指定欄位的值,如下:
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"
HDEL
HDEL命令可以從key指定的雜湊集中移除指定的域,在雜湊集中不存在的域將被忽略,如下:
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> HDEL k2 h1
(integer) 1
127.0.0.1:6379> HMGET k2 h1 h2 h3
1) (nil)
2) "v2"
3) "v3"
HSETNX
HSETNX命令只在key指定的雜湊集中不存在指定的欄位時,設定欄位的值,如果欄位已存在,該操作無效果。如下:
127.0.0.1:6379> HSETNX k2 h3 1
(integer) 0
127.0.0.1:6379> HSETNX k2 h4 1
(integer) 1
HVALS
HVALS命令可以返回key指定的雜湊集中所有欄位的值,如下:
127.0.0.1:6379> HVALS k2
1) "v2"
2) "v3"
3) "1"
HKEYS
HKEYS命令可以返回key指定的雜湊集中所有欄位的名字,如下:
127.0.0.1:6379> HKEYS k2
1) "h2"
2) "h3"
3) "h4"
HGETALL
HGETALL命令可以返回key指定的雜湊集中所有的欄位和值。返回值中,每個欄位名的下一個是它的值,所以返回值的長度是雜湊集大小的兩倍,如下:
127.0.0.1:6379> HGETALL k2
1) "h2"
2) "v2"
3) "h3"
4) "v3"
5) "h4"
6) "1"
HEXISTS
HEXISTS命令可以返回hash裡面field是否存在,如下:
127.0.0.1:6379> HEXISTS k2 h3
(integer) 1
HINCRBY
HINCRBY可以增加key指定的雜湊集中指定欄位的數值。如果key不存在,會建立一個新的雜湊集並與key關聯。如果欄位不存在,則欄位的值在該操作執行前被設定為0,HINCRBY支援的值的範圍限定在64位有符號整數,如下:
127.0.0.1:6379> HEXISTS k2 h3
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> HGET k2 h4
"1"
127.0.0.1:6379> HINCRBY k2 h4 5
(integer) 6
127.0.0.1:6379> HGET k2 h4
"6"
127.0.0.1:6379> HGET k2 h5
(nil)
127.0.0.1:6379> HINCRBY k2 h5 99
(integer) 99
127.0.0.1:6379> HGET k2 h5
"99"
HINCRBYFLOAT
HINCRBYFLOAT與HINCRBY用法基本一致,只不過這裡允許float型別的資料,不贅述。
HLEN
HLEN返回key指定的雜湊集包含的欄位的數量,如下:
127.0.0.1:6379> HLEN k2
(integer) 4
HSTRLEN
HSTRLEN可以返回hash指定field的value的字串長度,如果hash或者field不存在,返回0,如下:
127.0.0.1:6379> HSTRLEN k2 h2
(integer) 2
有序集合
有序集合類似Sets,但是每個字串元素都關聯到一個叫score浮動數值。裡面的元素總是通過score進行著排序,因此它是可以檢索的一系列元素。
ZADD
ZADD命令可以將所有指定成員新增到鍵為key的有序集合裡面。新增時可以指定多個分數/成員(score/member)對。 如果指定新增的成員已經是有序集合裡面的成員,則會更新該成員的分數(scrore)並更新到正確的排序位置。如下:
127.0.0.1:6379> ZADD k1 60 v1
(integer) 1
ZSCORE
ZSCORE命令可以返回有序集key中,成員member的score值。如下:
127.0.0.1:6379> ZSCORE k1 v1
"60"
ZRANGE
ZRANGE命令可以根據index返回member,該命令在執行時加上withscores引數可以連同score一起返回:
127.0.0.1:6379> ZRANGE k1 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> ZRANGE k1 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
7) "v4"
8) "90"
ZREVRANGE
ZREVRANGE和ZRANGE功能基本一致,不同的是ZREVRANGE是反著來的,如下:
127.0.0.1:6379> ZREVRANGE k1 0 3
1) "v5"
2) "v4"
3) "v3"
4) "v2"
127.0.0.1:6379> ZREVRANGE k1 0 3 withscores
1) "v5"
2) "100"
3) "v4"
4) "90"
5) "v3"
6) "80"
7) "v2"
8) "70"
ZCARD
ZCARD命令可以返回key的有序集元素個數。如下:
127.0.0.1:6379> ZCARD k1
(integer) 5
ZCOUNT
ZCOUNT命令可以返回有序集key中,score值在min和max之間(預設包括score值等於min或max)的成員。如下:
127.0.0.1:6379> ZCOUNT k1 60 90
(integer) 4
如果在統計時,不需要包含60或者90,則新增一個 ( 即可,如下:
127.0.0.1:6379> ZCOUNT k1 60 (90
(integer) 3
ZRANGEBYSCORE
ZRANGEBYSCORE命令可以按照score範圍範圍元素,加上withscores可以連score一起返回。如下:
127.0.0.1:6379> ZRANGEBYSCORE k1 60 80
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> ZRANGEBYSCORE k1 60 80 withscores
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "80"
127.0.0.1:6379> ZRANGEBYSCORE k1 (60 80 withscores
1) "v2"
2) "70"
3) "v3"
4) "80"
ZRANK
ZRANK命令可以返回有序集key中成員member的排名。其中有序整合員按score值遞增(從小到大)順序排列。排名以0為底,即score值最小的成員排名為0。如下:
127.0.0.1:6379> ZRANK k1 v1
(integer) 0
127.0.0.1:6379> ZRANK k1 v2
(integer) 1
ZREVRANK
ZREVRANK和ZRANK命令功能基本一致,不同的是,ZREVRANK中的排序是從大到小:
127.0.0.1:6379> ZREVRANK k1 v1
(integer) 4
127.0.0.1:6379> ZREVRANK k1 v2
(integer) 3
ZINCRBY
ZINCRBY命令可以為有序集key的成員member的score值加上增量increment。如果key中不存在member,就在key中新增一個member,score是increment(就好像它之前的score是0.0)。如果key不存在,就建立一個只含有指定member成員的有序集合:
127.0.0.1:6379> ZINCRBY k1 3 v1
"63"
127.0.0.1:6379> ZRANGE k1 0 0 withscores
1) "v1"
2) "63"
ZINTERSTORE
ZINTERSTORE命令可以計算給定的numkeys個有序集合的交集,並且把結果放到destination中。 在給定要計算的key和其它引數之前,必須先給定key個數(numberkeys)。該命令也可以在執行的過程中給原score乘以weights後再求和,如下:
127.0.0.1:6379> ZADD k2 2 v1
(integer) 1
127.0.0.1:6379> ZADD k2 3 v2
(integer) 1
127.0.0.1:6379> ZADD k2 4 v3
(integer) 1
127.0.0.1:6379> ZADD k3 9 v2
(integer) 1
127.0.0.1:6379> ZADD k3 10 v3
(integer) 1
127.0.0.1:6379> ZADD k3 11 v4
(integer) 1
127.0.0.1:6379> ZINTERSTORE k4 2 k2 k3
(integer) 2
127.0.0.1:6379> ZRANGE k4 0 -1 withscores
1) "v2"
2) "12"
3) "v3"
4) "14"
127.0.0.1:6379> ZINTERSTORE k5 2 k2 k3 weights 3 1
(integer) 2
127.0.0.1:6379> ZRANGE k5 0 -1 withscores
1) "v2"
2) "18"
3) "v3"
4) "22"
ZREM
ZREM命令可以從集合中彈出一個元素,如下:
127.0.0.1:6379> ZRANGE k2 0 -1 withscores
1) "v1"
2) "2"
3) "v2"
4) "3"
5) "v3"
6) "4"
127.0.0.1:6379> ZREM k2 v1
(integer) 1
127.0.0.1:6379> ZRANGE k2 0 -1 withscores
1) "v2"
2) "3"
3) "v3"
4) "4"
ZLEXCOUNT
ZLEXCOUNT命令用於計算有序集合中指定成員之間的成員數量。如下:
127.0.0.1:6379> ZLEXCOUNT k2 - +
(integer) 2
127.0.0.1:6379> ZLEXCOUNT k2 [v2 [v4
(integer) 2
**注意:可以用-和+**表示得分最小值和最大值,如果使用成員名的話,一定要在成員名之前加上[。
ZRANGEBYLEX
ZRANGEBYLEX 返回指定成員區間內的成員,按成員字典正序排序, 分數必須相同。如下:
127.0.0.1:6379> ZRANGEBYLEX k2 [v2 [v4
1) "v2"
2) "v3"
127.0.0.1:6379> ZRANGEBYLEX k2 - +
1) "v2"
2) "v3"
127.0.0.1:6379>
注意min和max引數的寫法和ZLEXCOUNT一致。
OK,雜湊和有序集合的命令我們就介紹這麼多,更多命令小夥伴們可以參考官方文件http://www.redis.cn/commands.html。小夥伴在看官方文件時,有什麼問題歡迎留言討論。
更多資料請關注公眾號:
相關文章
- [Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- 【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- (免費領取紅包封面)[Redis 系列]redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- (免費領取紅包封面)【Redis 系列】redis 學習四,set 集合,hash 雜湊,zset 有序集合初步認知Redis
- redis有序集合Redis
- Redis有序集合原理Redis
- Redis有序集合物件Redis物件
- Redis有序集合操作Redis
- Redis有序集合命令Redis
- Redis有序集合詳解Redis
- Redis有序集合學習Redis
- Redis物件——有序集合(ZSet)Redis物件
- redis之雜湊Redis
- redis學習之有序集合Redis
- php操作redis,有序集合zsetPHPRedis
- Redis命令——雜湊(Hash)Redis
- redis 有序集合(sorted set)(redis學習七)Redis
- 《Redis實戰》筆記-Redis的有序集合Redis筆記
- Redis 有序集合(zset)命令詳解Redis
- 【Redis實戰】有序集合型別Redis型別
- 【尋跡#3】 雜湊與雜湊表
- LeetCode705.設計雜湊集合LeetCode
- Redis 入門指南九:Redis 有序集合(sorted set)Redis
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- redis有序集合實現實時排名Redis
- redis——集合,有序,慢查詢, pipline與事務, bitmap ,HyperLogLog geoRedis
- 力扣-705. 設計雜湊集合力扣
- Hash,雜湊,雜湊?
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- [Redis]一致性雜湊Redis
- 進階的Redis之雜湊分片原理與叢集實戰Redis
- Ruby 札記 - Ruby 集合家族之雜湊(Hash)
- 七夕也要學起來,雜湊雜湊雜湊!
- 使用Redis的有序集合實現排行榜功能Redis
- Redis 雜湊結構記憶體模型剖析Redis記憶體模型
- 深入剖析Redis系列(六) - Redis資料結構之雜湊Redis資料結構
- 雜湊碰撞與生日攻擊
- Java集合原始碼分析之基礎(二):雜湊表Java原始碼