本篇文章通過命令和運用場景,帶大家了解一下redis中的五大基礎類型,命令和實踐比較多,希望對大家有所幫助!
redis 傳統 5 大數據類型的運用
redis 傳統 5 大數據類型的落地應用
Redis 介紹:
Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。 它支持多種類型的數據結構,如 字符串(Strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)] 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 復制(replication),lua腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁盤持久化(persistence), 并通過 Redis哨兵(sentinel) 和自動 分區(Cluster)提供高可用性(high availability)。【相關推薦:Redis視頻教程】
redis 命令查詢:http://www.redis.cn/commands.html
備注:redis 命令不區分大小寫,而 key 是區分大小寫的
查詢命令幫助:
help @類型名詞
示例:
string 字符串類型
最常用
set key vuue
getkey
同時設置/獲取多個鍵值
MSET key value [key value …]
MGET key [key ,,,]
數值增減
遞增數字 incr key
增加指定的整數 incrby key increment
遞減數值 decr key
減少指定的整數 decrby key decrement
獲取字符長度
strlen key
分布式鎖
setnx key value
set key value [EX seconds] [PX milliseconds] [NX|XX]
- EX: key 在多少秒后過期
- PX: key自多少毫秒后過期
- NX: 當key 不存在的時候,才創建 key. 效果等同于 setnx
- XX: 當 key 存在的時候,覆蓋 key
運用場景
- 商品編號、訂單號采用 INCR 命令生成
- 是否喜歡文章點贊
閱讀數:只要點擊了 rest 地址,直接使用 incr key 命令增加一個數字 1,完成記錄數字。
命令實踐
hash 哈希類型
和 Java 數據結構映射
Map
一次設置一個字段值
HSET key field value
一次獲取一個字段值
HGET key field
一次設置多個字段值
HMSET key field value [fild value …]
一次獲取多個字段值
HMGET key field [field …]
獲取所有字段值
hgetall key
獲取某個 key 內的全部數量
hlen
刪除一個 key
hdel
命令演示
應用場景
購物車的早期,當前中小廠可以使用
新增商品 –> hset shopcar:uid1024 334488 1
新增商品 –> hset shopcar:uid2014 334477 1
增加商品數量 –> hincrby shopcar:uid1024 334477 1
商品總數 –> hlen shopcar:uid1024
全部選擇 –> hgetall shopcar:uid1024
list 列表類型
向列表左邊添加元素
lpush key value [value …]
向列表右邊添加元素
rpush key value [value …]
查看列表
lrange key start stop
獲取列表中元素的個數
llen key
命令使用
應用場景
微信文章訂閱公眾號
1、【xx寶】和 【xx報】發布了文章分別是 11 和 22
2、 作者關注了他們兩個,只要他們發布了新的文章,就會推送到我的 list
lpush likearticle: uid1024 11 22
3、查看作者自己的訂閱號的全部文章,類似分頁,下面 0-10 就是 一次顯示 10 條 lrange likearticle:uid1024 0 10
set 不重復列表類型
添加元素
sadd key member [member …]
刪除元素
srem key member [member …]
獲取集合的所有元素
smembers key
判斷元素是否在集合中
sismember key member
獲取集合中的元素個數
scard key
從集合中隨機彈出一個元素, 元素不刪除
srandmember key [數字]
從集合中隨機彈出一個元素,出一個刪一個
spop key [數字]
集合運算
-
集合的差集運算 A – B
屬于 A 但不屬于 B 的元素構造成的集合
sdiff key [key …]
-
集合的交集元算 A ^ B
屬于 A 同時也屬于 B 共同擁有的元素
simter key [key …]
-
集合的并集運算 A v B
屬于 A 或者屬于 B 的元素合并后的集合
sunion key [key …]
運用場景
微信抽獎小程序
1、用戶 id, 立即參與, sadd key 用戶id
2、顯示已經有多少人參與了當前有 67231 人參與, scard key
3、抽獎(從 set 中任意選取 N 個中獎人)
srandmember key 2 隨機抽獎 2 個人, 元素不會刪除
spop key 3 司機抽獎 3 個人, 元素會刪除
微信朋友圈點贊
1、新增點贊 ; sadd pub:msgid 點贊用戶id1 點贊用戶id2
2、取消點贊;srem pub:msgid 點贊用戶id
3、展示所有點過贊的用戶 smembers pub:msgid
4、點贊用戶數統計,就是常見的待點贊的紅色數數字 scard pub:msgid
5、判斷某個朋友是否對樓主點過贊, sismember pub:msgid 用戶id
微博好友關注社交關系
共同關注的人
sadd s1 1 2 3 4
sadd s2 2 3 6 8
sinter s1 s2
共同關注:我去某人的微博,馬上獲取和某人共同關注的人
我關注的人, 也關注了他(大家愛好相同)
我關注了華為余承東, 余承東也關注了張召動, 我和余總有共同的愛好
sadd s1 1 2 3 4 5
sadd s2 3 4 5 6 7
sismember s1 3
sismember s2 3
QQ內推可能認識的人
sadd s1 1 2 3 4 5
sadd s2 3 4 5 6 7
// 共同好友
sinter s1 s2
// 差集
sdiff s1 s2
sdiff s2 s1
zset 有序集合
常用命令
1、 向有序集合中添加一個元素和該元素的分數
2、 添加元素
- ZADD key score member [score member …]
3、 按照元素分數從小到達的順序返回索引從 strat 到 stop 之間的所有元素
- zrange key start stop [WITHSORES]
4、獲取元素的分數
- zscore key member [member …]
5、刪除元素
- zrem key member [member …]
6、 獲取指定分數范圍的元素
- zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
7、增加某個元素的分數
- zincrby key increment member
8、 獲取集合中元素的數量
- zcard key
9、獲得指定分數范圍內的元素個數
- zcount key min max
10、按照排名范圍刪除元素
- zremrangebyrank key start stop
11、獲取元素的排名
-
從小到大 zrank key member
-
從大到小 zrevrank key member
應用場景
1、更具商品銷售對商品進行排序顯示
思路:定義商品銷售排行榜(sorted set 集合),key 為 goods:sellsort, 分數為商品銷售數量。
商品編號 1001 的銷量是 9 , 商品編號 1002 的銷量是 15 | zadd goods:sellsort 9 1001 15 1002
有一個顧客又買了 2 件商品 1001 , 商品編號是 1001 響亮增加 2 | zincrby goods:sellsort 2 10001
求商品銷量前 10 名 zrange goods:sellsort 0 10 withscores
2、 抖音熱搜
1、點擊視頻
ZINCRBY hotavi:20220203 1 八百
ZINCRBY hotavi:20220203 15 八百 2 花木蘭
2、展示當日排行前 10 條
zrevrange hotavi:20220203 0 9 withscores
更多編程相關知識,請訪問:Redis視頻教程!!