1、String&&bitmap的api操作
1.1 String的常用api
String是redis最常用的結構,進入redis用戶端輸入 help @string 可以檢視api
序号 | 指令及描述 |
1 | SET key value 設定指定 key 的值 |
2 | GET key 擷取指定 key 的值。 |
3 | GETRANGE key start end 傳回 key 中字元串值的子字元 |
4 | GETSET key value 将給定 key 的值設為 value ,并傳回 key 的舊值(old value)。 |
5 | GETBIT key offset 對 key 所儲存的字元串值,擷取指定偏移量上的位(bit)。 |
6 | MGET key1 [key2..] 擷取所有(一個或多個)給定 key 的值。 |
7 | SETBIT key offset value 對 key 所儲存的字元串值,設定或清除指定偏移量上的位(bit)。 |
8 | SETEX key seconds value 将值 value 關聯到 key ,并将 key 的過期時間設為 seconds (以秒為機關)。 |
9 | SETNX key value 隻有在 key 不存在時設定 key 的值。 |
10 | SETRANGE key offset value 用 value 參數覆寫給定 key 所儲存的字元串值,從偏移量 offset 開始。 |
11 | STRLEN key 傳回 key 所儲存的字元串值的長度。 |
12 | MSET key value [key value ...] 同時設定一個或多個 key-value 對。 |
13 | MSETNX key value [key value ...] 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 |
14 | PSETEX key milliseconds value 這個指令和 SETEX 指令相似,但它以毫秒為機關設定 key 的生存時間,而不是像 SETEX 指令那樣,以秒為機關。 |
15 | INCR key 将 key 中儲存的數字值增一。 |
16 | INCRBY key increment 将 key 所儲存的值加上給定的增量值(increment) 。 |
17 | INCRBYFLOAT key increment 将 key 所儲存的值加上給定的浮點增量值(increment) 。 |
18 | DECR key 将 key 中儲存的數字值減一。 |
19 | DECRBY key decrement key 所儲存的值減去給定的減量值(decrement) 。 |
20 | APPEND key value 如果 key 已經存在并且是一個字元串, APPEND 指令将 value 追加到 key 原來的值的末尾。 |
1.2 redis的bitmap
bitmap可以通過setbit設定某一位為1或者0
setbit key offset value
offset 代表二進制的位,如 setbit k1 7 1,就是将第7位設定為1。
如果 offset 大于一個位元組的長度,則會開辟另一個位元組。如 set k1 9 1--->0000 0000 0100 0000
1.2.1 bitmap的應用
1:有使用者系統,統計使用者在某段時間區間登入天數
setbit user:michael 1 1
setbit user:michael 7 1
setbit user:michael 364 1
STRLEN user:michael
BITCOUNT user:michael -1 -1 //統計最後一個位元組有多少1
strlen user:michael 會輸出總共占用多少個位元組
BITCOUNT則會統計位元組區間共有多少個1
2,電商618做活動:送禮物
大庫備貨多少禮物
假設京東有2億使用者
僵屍使用者
冷熱使用者/忠誠使用者
活躍使用者統計!随機視窗
比如說 1号~3号 連續登入要 去重
日期作為key
setbit 20190101 1 1
setbit 20190102 1 1
setbit 20190102 7 1
bitop or destkey 20190101 20190102
BITCOUNT destkey 0 -1
2、list的常用api操作
可以通過 help @list 檢視 api
序号 | 指令及描述 |
1 | BLPOP key1 [key2 ] timeout 移出并擷取清單的第一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。 |
2 | BRPOP key1 [key2 ] timeout 移出并擷取清單的最後一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。 |
3 | BRPOPLPUSH source destination timeout 從清單中彈出一個值,将彈出的元素插入到另外一個清單中并傳回它; 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。 |
4 | LINDEX key index 通過索引擷取清單中的元素 |
5 | LINSERT key BEFORE|AFTER pivot value 在清單的元素前或者後插入元素 |
6 | LLEN key 擷取清單長度 |
7 | LPOP key 移出并擷取清單的第一個元素 |
8 | LPUSH key value1 [value2] 将一個或多個值插入到清單頭部 |
9 | LPUSHX key value 将一個或多個值插入到已存在的清單頭部 |
10 | LRANGE key start stop 擷取清單指定範圍内的元素 |
11 | LREM key count value 移除清單元素 |
12 | LSET key index value 通過索引設定清單元素的值 |
13 | LTRIM key start stop 對一個清單進行修剪(trim),就是說,讓清單隻保留指定區間内的元素,不在指定區間之内的元素都将被删除。 |
14 | RPOP key 移除并擷取清單最後一個元素 |
15 | RPOPLPUSH source destination 移除清單的最後一個元素,并将該元素添加到另一個清單并傳回 |
16 | RPUSH key value1 [value2] 在清單中添加一個或多個值 |
17 | RPUSHX key value 為已存在的清單添加值 |
應用場景:微網誌和微信消息推送
我關注了A、B兩個人,
A 發微網誌,消息ID為 1 <---> LPUSH message:myid 1
B 發微網誌,消息ID為 2 <---> LPUSH message:myid 2
檢視最新消息 LRANGE message:myid 0 5
3、hash結構常用api
序号 | 指令及描述 |
1 | HDEL key field2 [field2] 删除一個或多個哈希表字段 |
2 | HEXISTS key field 檢視哈希表 key 中,指定的字段是否存在。 |
3 | HGET key field 擷取存儲在哈希表中指定字段的值/td> |
4 | HGETALL key 擷取在哈希表中指定 key 的所有字段和值 |
5 | HINCRBY key field increment 為哈希表 key 中的指定字段的整數值加上增量 increment 。 |
6 | HINCRBYFLOAT key field increment 為哈希表 key 中的指定字段的浮點數值加上增量 increment 。 |
7 | HKEYS key 擷取所有哈希表中的字段 |
8 | HLEN key 擷取哈希表中字段的數量 |
9 | HMGET key field1 [field2] 擷取所有給定字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] 同時将多個 field-value (域-值)對設定到哈希表 key 中。 |
11 | HSET key field value 将哈希表 key 中的字段 field 的值設為 value 。 |
12 | HSETNX key field value 隻有在字段 field 不存在時,設定哈希表字段的值。 |
13 | HVALS key 擷取哈希表中所有值 |
14 | HSCAN key cursor [MATCH pattern] [COUNT count] 疊代哈希表中的鍵值對。 |
1 hash結構可以用來做對象緩存如下圖:
2 使用者關注
hash結構優點:
1 同類資料整合存儲,友善統一管理
2 相比String操作消耗記憶體與CPU更少
3 比String更節省空間
缺點:
1 過期功能不能使用在field上,隻能用于key
2 redis叢集架構不适合大規模應用
4、set結構和常用api
序号 | 指令及描述 |
1 | SADD key member1 [member2] 向集合添加一個或多個成員 |
2 | SCARD key 擷取集合的成員數 |
3 | SDIFF key1 [key2] 傳回給定所有集合的差集 |
4 | SDIFFSTORE destination key1 [key2] 傳回給定所有集合的差集并存儲在 destination 中 |
5 | SINTER key1 [key2] 傳回給定所有集合的交集 |
6 | SINTERSTORE destination key1 [key2] 傳回給定所有集合的交集并存儲在 destination 中 |
7 | SISMEMBER key member 判斷 member 元素是否是集合 key 的成員 |
8 | SMEMBERS key 傳回集合中的所有成員 |
9 | SMOVE source destination member 将 member 元素從 source 集合移動到 destination 集合 |
10 | SPOP key 移除并傳回集合中的一個随機元素 |
11 | SRANDMEMBER key [count] 傳回集合中一個或多個随機數 |
12 | SREM key member1 [member2] 移除集合中一個或多個成員 |
13 | SUNION key1 [key2] 傳回所有給定集合的并集 |
14 | SUNIONSTORE destination key1 [key2] 所有給定集合的并集存儲在 destination 集合中 |
15 | SSCAN key cursor [MATCH pattern] [COUNT count] 疊代集合中的元素 |
set的應用場景
1 微信微網誌點贊、收藏、标簽
點贊操作: SADD Rate:消息ID 使用者ID
取消點贊: SREM Rate:消息ID 使用者ID
檢查使用者是否點過贊: SISMEMBER Rate:消息ID 使用者ID
擷取點贊的使用者清單: SMEMBERS Rate:消息ID
擷取點贊使用者數: SCARD Rate:消息ID
2 實作微網誌關注功能(用集合操作)
取交集: SINTER set1 set2 set3 ---> {b}
取并集: SUNION set1 set2 set3 ---> {a,b,c,d,f}
取差集: SDIFF set1 set2 set3 ---> {a} //結果是在集合set1中出現,但是沒有在其他集合出現
A B的共同關注 SINTER seta setb
A 關注的人也關注了他(C) SISMEMBER B C SISMEMBER D C
A可能認識的人 SDIFF B A SDIFF C A
3 抽獎
加入抽獎集合:SADD key 使用者ID
檢視參與抽獎的所有使用者: SMEMBERS key
随機抽獎:SRANDMEMBER key count //count代表抽多少人
5 zset結構和常用api
Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重複。
集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
序号 | 指令及描述 |
1 | ZADD key score1 member1 [score2 member2] 向有序集合添加一個或多個成員,或者更新已存在成員的分數 |
2 | ZCARD key 擷取有序集合的成員數 |
3 | ZCOUNT key min max 計算在有序集合中指定區間分數的成員數 |
4 | ZINCRBY key increment member 有序集合中對指定成員的分數加上增量 increment |
5 | ZINTERSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的交集并将結果集存儲在新的有序集合 key 中 |
6 | ZLEXCOUNT key min max 在有序集合中計算指定字典區間内成員數量 |
7 | ZRANGE key start stop [WITHSCORES] 通過索引區間傳回有序集合成指定區間内的成員 |
8 | ZRANGEBYLEX key min max [LIMIT offset count] 通過字典區間傳回有序集合的成員 |
9 | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 通過分數傳回有序集合指定區間内的成員 |
10 | ZRANK key member 傳回有序集合中指定成員的索引 |
11 | ZREM key member [member ...] 移除有序集合中的一個或多個成員 |
12 | ZREMRANGEBYLEX key min max 移除有序集合中給定的字典區間的所有成員 |
13 | ZREMRANGEBYRANK key start stop 移除有序集合中給定的排名區間的所有成員 |
14 | ZREMRANGEBYSCORE key min max 移除有序集合中給定的分數區間的所有成員 |
15 | ZREVRANGE key start stop [WITHSCORES] 傳回有序集中指定區間内的成員,通過索引,分數從高到底 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] 傳回有序集中指定分數區間内的成員,分數從高到低排序 |
17 | ZREVRANK key member 傳回有序集合中指定成員的排名,有序內建員按分數值遞減(從大到小)排序 |
18 | ZSCORE key member 傳回有序集中,成員的分數值 |
19 | ZUNIONSTORE destination numkeys key [key ...] 計算給定的一個或多個有序集的并集,并存儲在新的 key 中 |
20 | ZSCAN key cursor [MATCH pattern] [COUNT count] 疊代有序集合中的元素(包括元素成員和元素分值) |
zset的應用場景
熱搜排序展示
1 點選新聞
ZINCRBY hotnews:20210714 1 華萊士 //點選一次新聞,對應熱度加一,熱度就是分數
2 展示當日排行前十
ZREVRANGE hotnews:20210714 0 10 WITHSCORES
3 七日搜尋榜單計算
ZUNION hotnews:20210714-20210720 7 hotnews:20210714 hotnews:20210715 ... hotnews:20210720
4 展示七日排行前十
ZREVRANGE hotnews:20210714-20210720 0 10 WITHSCORES
本文語雀連接配接:https://www.yuque.com/michael-qambz/igeais/nie56i