您現在的位置是:首頁 > 動漫首頁動漫

二、redis中Hash、Set、SortedSet應用場景

由 程式猿的花果山 發表于 動漫2021-07-05
簡介3 banana 1 orange”)| ZRANGE k1 start stop[WITHSCORES] 命令可以取出redis中指定數量的SET集合,該集合按照存入時候的權重(score分值)進行排序

redishash可以隨機彈出嗎

導讀

前面文章【

一、深入理解redis之需要掌握的知識點

】中,我們對redis需要學習的內容框架進行了一個梳理。【

二、redis中String和List兩種資料型別和應用場景

】我們對redis中String和List兩種資料型別做了一下講解,並且對他們各自的應用場景進行了介紹。

本篇文章我們學習的是redis中剩餘的三種基礎資料型別Hash、Set和SortedSet,以及他們的應用場景。

二、redis中Hash、Set、SortedSet應用場景

Hash

Hash儲存的是一組hash資訊,類似java中的HashMap,可以儲存Object資訊。

Hash的應用場景為儲存聚合資訊,例如淘寶中商品的詳情頁的資訊。

| HSET key field value 命令是往redis中儲存鍵值對(“

Hset user:1000 username antirez

”)

| HGET key field value 命令是從redis中獲取存入的鍵值對(“

HGET user:1000 username”,返回antirez或者nil

| HMSET key field value field… value。。。命令可以一次性給一個key賦值多個鍵值對(“

HMSET user:1000 username antirez birthyear 1977 verified 1

”)

|

HMGET key field。。。命令可以一次性獲取key中的多個鍵對應的值

(“HMGET user:1000 username birthyear”返回“antirez 1977” )

|

HGETALL key 命令可以一次性返回key中儲存的所有鍵值對資訊

(“HGETALL user:1000” 返回“ username antirez birthyear 1977 verified 1”)

|

HINCRBY key field value命令可以對key中儲存的某一個個指定的鍵值對的值進行數值加操作

(“HINCRBY user:1000 birthyear 10 ”返回 “1987” )

|

HKEYS key 命令返回key中儲存的所有鍵值對的鍵

(“HKEYS user:1000 ”返回“username bitthyear verified”)

|

HVALS key 命令返回key中儲存的所有鍵值對的值

(“HVALS user:1000” 返回 “antirez 1987 1”) |

Set

Set儲存的是一個經過去重的無序集合

。這裡面的序指的是根據特定值進行排序,而不是指像LIST一樣,按照插入順序進行排序。

| SADD key member。。。向redis中的SET存放多個數據;(“SADD k1 ooxx xxoo xoxo oxox xoox oxxo ooxx”返回“6”)透過以上命令可以發現,存入的值是7個,但是真實存入的卻是6個,這個就理解到了SET的去重功能

| SMEMBERS key 命令獲取redis中key對應儲存的所有members;(“SMEMBERS k1”返回“ooxx xxoo xoxo oxox xoox oxxo”)

|

SET儲存的資料是無序的,因此可以借用這個特性從SET中隨機獲取指定數量的值;這個特性對應的命令是SRANDMEMBERS key count; 在這個命令中cout的數值的大小和正負代表了不同的隨機性;

cout的值是正數代表從SET中按照隨機順序取出cout個去重的資料,如果count的數值是正數且大於SET中的size也只會返回size個數據;

cout的值是負數代表從SET中按照隨機順序取出count個沒有經過去重的資料,即使cout的值小於等於SET中size也會出現重複,如果count的數值是負數且大於SET中的size,那麼就會返回count個沒有經過去重的資料。

SRANDMEMBERS命令中count值的正負可以理解為抽獎的兩種方式,一種是抽完後從池子中取出,一種是抽完後再放回池子,count的值的大小代表按照兩種方式抽獎的次數。

| SPOP key 命令可以從SET集合中隨機取出並刪除一個元素;SPOP命令的應用場景為撲克牌系統。

SET的另一個操作為集合操作,並集、交集、差集等。

| SINTER key key。。。命令可以取指定多個key的交集(“SINTER k1 k2”)

| SUNION key key。。。命令可以取指定多個key的並集(“SUNION k1 k2”)

| SDIFF key key。。。命令可以取指定多個key的差集(“SDIFF k1 k2”);

這裡需要注意,

在差集中存在左差集和右差集的區別

例如存入“sadd k1 a b c d”、“sadd k2 a b e f”;“SDIFF k1 k2”返回“c d”;“SDIFF k2 k1”返回“e f”;

需要注意的是集合操作是非常耗時的,容易影響reids的效能,因此要儘量把需要做集合操作的服務放到一個單獨的REDIS中 |

SET中這種集合操作(並集、交集、差集)的應用場景為推薦系統,共同好友(交集)、可能認識的人(外差集)、愛好等。

SortedSet

SORTEDSET(ZSET)是一個經過去重的有序的集合。有序集合的應用場景為按照指定權重(score分值)對內容進行排序。

例如按照水果的含糖量,商品的售價,商品的銷售數量,另外還有排行榜,評論的翻頁等。排序分為正序和倒序。

ZADD key score member score… member。。。命令可以向redis中插入指定權重(score分值)的member(“ZADD k1 2。2 apple 3。3 banana 1 orange”)

| ZRANGE k1 start stop[WITHSCORES] 命令可以取出redis中指定數量的SET集合,該集合按照存入時候的權重(score分值)進行排序;

如果start stop 為正數則按照正序取出;

如果start stop為負數,則按照

反序(注意是反序不是倒序)取出

;WITHSCORES為可選項,表示是否攜帶權重分值;

“ZRANGE k1 0 -1 WITHSCORE”返回 “orange 1 apple 2。2 banana 3。3”;

注意ZRANGE命令獲取的資料始終都是按照權重(score分值)的正序排列的,ZRANGE 命令中 start stop的正負代表的是從SET集合的左側取還是右側取

| 如果想按照權重(score分值)的倒序獲取返回的資料,那麼請使用ZREVRANGE key start stop[WITHSCORES];“ZREVRANGE k1 0 -1 WITHSCORE”返回“banana 3。3 apple 2。2 orange 1”

| ZINCRBY key increment member命令可以對SortedSet中的指定member的權重(score分值)進行增加指定數值,以實現動態排序;“ZINCRBY k1 4 orange”命令把k1有序集合中名為orange的member的權重(score分值)動態增加了4,由原來的1變更為了5,這個時候使用“ZRANGE k1 0 -1 WITHSCORES”返回的值為“apple 2。2 banana 3。3 orange 5”。

往期文章

一、深入理解redis之需要掌握的知識點

二、redis中String和List兩種資料型別和應用場景

後續還需要學習的內容

二、redis中Hash、Set、SortedSet應用場景

二、redis中Hash、Set、SortedSet應用場景

二、redis中Hash、Set、SortedSet應用場景