Redis-6-針對散列和有序集合的常用命令

上文中,介紹了list和set的一些常用的命令,下面再來看一下散列和有序集合的一些常用的命令

散列(hash)

和java中的hashmap其實是差不多的,redis其實就是存放的鍵值對,散列也是存放的鍵值對,,下面來具體看下一下一些常用的操作

hset

hset用來設(shè)置key指定的哈希集中指定字段的值, 如果key指定的哈希集不存在,就會創(chuàng)建一個新的哈希集并與key關(guān)聯(lián),如果字段在哈希集中存在,它將被重寫,具體使用如下:

172.16.12.3:6379> hset myhash field1 hello
(integer) 1

這里的返回值:

  • 1: 表示這個field是一個新的字段
  • 0: 表示這個field是原來已經(jīng)存在的

hget

hget用來返回key指定的哈希集中某一個field的值,如下:

172.16.12.3:6379> hget myhash field1
"hello"

hmset

hmset,批量添加的命令,使用如下:

172.16.12.3:6379> hmset myhash field2 world field3 java field4 php
OK

hmget

是一個批量查詢的命令,如下:

172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) "hello"
2) "world"
3) "java"
4) "php"

hdel

用來刪除key指定的哈希集中指定的field,如果這個field不存在,則會被忽略,如下:

172.16.12.3:6379> hdel myhash field1
(integer) 1
172.16.12.3:6379> hmget myhash field1 field2 field3 field4
1) (nil)
2) "world"
3) "java"
4) "php"

hsetnx

hsetnx命令,只在key指定的哈希集中,不存在指定的字段時再設(shè)置字段的值,如果是已經(jīng)存在的,則命令無效,如下:

172.16.12.3:6379> hsetnx myhash field4 c++
(integer) 0
172.16.12.3:6379>  hsetnx myhash field5 c++
(integer) 1

hvals

用來返回key指定的哈希集中的所有字段的值,如下:

172.16.12.3:6379> hvals myhash
1) "world"
2) "java"
3) "php"
4) "c++"

hkeys

用來返回key指定的哈希集中的所有字段的名字,如下:

172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"

hgetall

返回key指定的哈希集中的所有字段和值,在返回值中,每個字段名的下一個是他的值,返回值的長度是該哈希集大小的兩倍,如下:

172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"

hexists

用來判斷key對應(yīng)的哈希集中,指定的field是否存在,如下:

172.16.12.3:6379> hexists myhash field1
(integer) 0
172.16.12.3:6379> hexists myhash field2
(integer) 1

hincrby

用來增加key指定的哈希集中指定字段的數(shù)值

如果指定的哈希集不存在,那就會創(chuàng)建一個新的hash并與key關(guān)聯(lián)

如果字段不存在,則字段的值在該操作執(zhí)行前被設(shè)置為0

hincrby命令支持的值的范圍限定在64位有符號整數(shù)

172.16.12.3:6379> hgetall myhash
1) "field2"
2) "world"
3) "field3"
4) "java"
5) "field4"
6) "php"
7) "field5"
8) "c++"


172.16.12.3:6379> hset myhash field6 1
(integer) 1
172.16.12.3:6379> hincrby myhash field6 9
(integer) 10
172.16.12.3:6379> hincrby myhash field7 6
(integer) 6
172.16.12.3:6379> hget myhash field6
"10"
172.16.12.3:6379> hget myhash field7
"6"

hincrbyfloat

和上面的hincrby用法一樣,只不過是可以加float類型的數(shù)據(jù)

172.16.12.3:6379> hincrbyfloat myhash field7 1.55
"7.55"
172.16.12.3:6379> hget myhash field7
"7.55"

hlen

可以獲取到key指定的哈希集包含的字段的數(shù)量,如下:

172.16.12.3:6379> hkeys myhash
1) "field2"
2) "field3"
3) "field4"
4) "field5"
5) "field6"
6) "field7"

172.16.12.3:6379> hlen myhash
(integer) 6

hstrlen

獲取key指定的哈希集中的,指定的field對應(yīng)的value的長度 ,如果field不存在的話,就返回0,如下:

172.16.12.3:6379> hstrlen myhash field2
(integer) 5
172.16.12.3:6379> hstrlen myhash field7
(integer) 4
172.16.12.3:6379> hstrlen myhash field8
(integer) 0

有序集合(zset)

有序集合類似set,但是每個字符串元素都關(guān)聯(lián)到一個score的數(shù)值,里面的元素總是通過score進行著排序,因此它是可以檢索的一系列元素

zadd

往鍵為key的集合里面添加元素

添加時,可以指定多個分?jǐn)?shù)/成員(score/member)對,如果指定添加的成員已經(jīng)存在,則會更新分?jǐn)?shù),然后將成員更新到正確的位置,如下:

172.16.12.3:6379> zadd myzset 60 v1
(integer) 1

首先是key,然后分?jǐn)?shù),最后是值.

zscore

返回有序集合key中, 指定成員的score值,如下:

172.16.12.3:6379> zscore myzset v1
"60"

zrange

zrange 命令可以根據(jù)下標(biāo)返回元素, 要指定開始和結(jié)束的下標(biāo), 還可以加一個withscores 參數(shù),可以將元素的score

172.16.12.3:6379> zadd myzset 61 v2
(integer) 1
172.16.12.3:6379>  zadd myzset 62 v3
(integer) 1
172.16.12.3:6379>  zadd myzset 63 v4
(integer) 1

172.16.12.3:6379> zrange myzset 0 3
1) "v1"
2) "v2"
3) "v3"
4) "v4"

172.16.12.3:6379> zrange myzset 0 3 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"

zrevrange

zrevrange和zrange的功能基本一樣,只不過zrevrange返回數(shù)據(jù)的順序是反著的,如下:

172.16.12.3:6379> zrevrange myzset 0 3 withscores
1) "v4"
2) "63"
3) "v3"
4) "62"
5) "v2"
6) "61"
7) "v1"
8) "60"
172.16.12.3:6379> zrevrange myzset 0 3
1) "v4"
2) "v3"
3) "v2"
4) "v1"

zcard

可以返回zset中元素的個數(shù),如下:

172.16.12.3:6379> zcard myzset
(integer) 4

zcount

zcount可以返回有序集key中棍好,score值在min和max之間(默認(rèn)包括score值等于min或max)的成員的數(shù)量

172.16.12.3:6379> zcount myzset 60 63
(integer) 4

如果我們想統(tǒng)計的不需要包含 開始或者結(jié)束區(qū)間的值,可以加一個(,如下:

172.16.12.3:6379> zcount myzset 60 (63
(integer) 3
172.16.12.3:6379> zcount myzset (60 (63
(integer) 2

zrangebyscore

zrangebyscore,可以按照分?jǐn)?shù)的范圍,獲取對應(yīng)的元素,加上withscores可以連score一起返回,如下:

172.16.12.3:6379> zrangebyscore myzset 60 63
1) "v1"
2) "v2"
3) "v3"
4) "v4"
172.16.12.3:6379> zrangebyscore myzset 60 63 withscores
1) "v1"
2) "60"
3) "v2"
4) "61"
5) "v3"
6) "62"
7) "v4"
8) "63"
172.16.12.3:6379> zrangebyscore myzset (60 (63
1) "v2"
2) "v3"

zrank

zrank,可以返回有序集合中指定成員的排名, 在zset中,成員的排名是按照score分?jǐn)?shù)從小到大去排序的,排名是從0開始的,如下:

172.16.12.3:6379> zrank myzset v1
(integer) 0
172.16.12.3:6379> zrank myzset v3
(integer) 2

zrevrank

zrevrank和zrank是差不多的,只不過zrevrank是按照score是從大到小去排序的,如下:

172.16.12.3:6379> zrevrank myzset v3
(integer) 1
172.16.12.3:6379> zrevrank myzset v1
(integer) 3

zincrby

語法是:

zincrby key increment member

為有序集合key的成員member的score值加上增量increment

如果key中不存在member,就在key中添加一個member,score是increment

如果key不存在,就創(chuàng)建一個只含有指定member成員的有序集合.

當(dāng)key不是有序集類型時,返回一個錯誤

172.16.12.3:6379> zincrby myzset 10 v1
"70"

zinterstore

語法如下:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [SUM|MIN|MAX]

該命令是用來計算給定的numkeys個有序集合的交集,并且把結(jié)果放到destination中

在給定要計算的key和其它參數(shù)之前,必須先給定key個數(shù)(numberkeys)

默認(rèn)情況下,結(jié)果集destination中一個元素的分?jǐn)?shù)是有序集合中該元素分?jǐn)?shù)之和,前提是該元素在這些有序集合中都存在,因為交集要求其成員必須是給定的每個有序集合中的成員

WEIGHTS,是在執(zhí)行的過程中給原score乘以weights后再求和

如果destination存在峻村,就把它覆蓋

返回值是結(jié)果有序集合destination中元素個數(shù)

具體使用如下:

172.16.12.3:6379> zadd zset1 1 one
(integer) 1
172.16.12.3:6379> zadd zset1 2 two
(integer) 1

172.16.12.3:6379> zadd zset2 1 one
(integer) 1
172.16.12.3:6379> zadd zset2 2 two
(integer) 1
172.16.12.3:6379> zadd zset2 3 three
(integer) 1

172.16.12.3:6379> zinterstore outzset 2 zset1 zset2 weights 2 3
(integer) 2
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "one"
2) "5"
3) "two"
4) "10"

zrem

zrem命令,可以從集合中移除一個元素,如下:

172.16.12.3:6379> zrem outzset one
(integer) 1
172.16.12.3:6379> zrange outzset 0 -1 withscores
1) "two"
2) "10"

zlexcount

命令用于計算有序集合中指定成員之間的成員數(shù)量,如下:

172.16.12.3:6379> zrange myzset 0 -1 withscores
1) "v2"
2) "61"
3) "v3"
4) "62"
5) "v4"
6) "63"
7) "v1"
8) "70"

172.16.12.3:6379> zlexcount myzset - +
(integer) 4

172.16.12.3:6379>  zlexcount myzset [v1 [v2
(integer) 1

可以用-和+表示得分最小值和最大值,如果使用成員名的話,一定要在成員名之前加上[.

zrangebylex

zrangebylex返回指定成員區(qū)間內(nèi)的成員,按成員字典正序排序, 分?jǐn)?shù)必須相同,如下:

172.16.12.3:6379> zrangebylex myzset [v1 [v2
1) "v2"
172.16.12.3:6379>  zrangebylex myzset - +
1) "v2"
2) "v3"
3) "v4"
4) "v1"

好了,就介紹這么多的命令,其他需要的話,請參考官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杂拨,一起剝皮案震驚了整個濱河市砍艾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肾扰,老刑警劉巖点楼,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異白对,居然都是意外死亡掠廓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門甩恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟀瞧,“玉大人,你說我怎么就攤上這事条摸≡梦郏” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵钉蒲,是天一觀的道長切端。 經(jīng)常有香客問我,道長顷啼,這世上最難降的妖魔是什么踏枣? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮钙蒙,結(jié)果婚禮上茵瀑,老公的妹妹穿的比我還像新娘。我一直安慰自己躬厌,他們只是感情好马昨,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扛施,像睡著了一般鸿捧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疙渣,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天匙奴,我揣著相機與錄音,去河邊找鬼昌阿。 笑死饥脑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懦冰。 我是一名探鬼主播灶轰,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刷钢!你這毒婦竟也來了笋颤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤内地,失蹤者是張志新(化名)和其女友劉穎伴澄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阱缓,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡非凌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荆针。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞嗡。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖航背,靈堂內(nèi)的尸體忽然破棺而出喉悴,到底是詐尸還是另有隱情,我是刑警寧澤玖媚,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布箕肃,位于F島的核電站,受9級特大地震影響今魔,放射性物質(zhì)發(fā)生泄漏勺像。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一错森、第九天 我趴在偏房一處隱蔽的房頂上張望咏删。 院中可真熱鬧,春花似錦问词、人聲如沸督函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辰狡。三九已至,卻和暖如春垄分,著一層夾襖步出監(jiān)牢的瞬間宛篇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工薄湿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叫倍,地道東北人偷卧。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像吆倦,于是被迫代替她去往敵國和親听诸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容