redis的五種數(shù)據(jù)類型和使用場景
string類型
string類型多用于緩存
set key value(value可以為json字符串)
setnx多用于分布式鎖(后面詳細整理)
計數(shù)器
incr article:{文章id}:readcount
get article:{文章id}:readcount
web集群session共享
redis實現(xiàn)session共享
https://www.cnblogs.com/cxx8181602/p/9759645.html
分布式系統(tǒng)全局序列號(分庫分表的主鍵可以使用此方法 批量生成id會提升性能)
incrby orderid 1000
setbit的位運算
http://www.reibang.com/p/3a30f58ba62c
hash類型
對象存儲
mset user {user_id}:name test {user_id}:age 12
hget user {user_id}:name {user_id}:age
因為redis是單線程操作氧敢,有一個非常大的忌諱就是不要讓key太大,會導致執(zhí)行該命令時間非常長,會阻塞線程此洲,所以hash不要當作數(shù)據(jù)庫來用相种,只是存儲一些熱數(shù)據(jù)就行
在實際應用中及穗,可以給hash的key來分段心软,有一點類似于數(shù)據(jù)庫分表那種思路颗祝,把數(shù)據(jù)存儲在不同的key中,切記泌枪,千萬不要讓一個key過大
可以用來實現(xiàn)購物車功能
實現(xiàn)方式如下圖
- 以用戶id為key
- 以商品id為field
- 商品數(shù)量為value
購物車操作流程 - 添加商品 hset cart:123 10010 1(123為user_id 10010為商品id)
- 增加數(shù)量 hincrby cart:123 10010 1
- 商品總數(shù) hlen cart:123
- 刪除商品 hdel cart:123 10010
- 獲取購物車所有商品 hgetall cart:123
和string相比的優(yōu)缺點
優(yōu)點
- 同類數(shù)據(jù)歸檔概荷,存儲比較方便
- 比string消耗的cpu更小
- 比string更節(jié)省存儲空間
缺點 - 過期功能不能用在field上,只能用在key上
- 不適合在集群架構下大規(guī)模使用(集群數(shù)據(jù)都是分片處理的碌燕,目的是讓數(shù)據(jù)分段均勻的存儲误证,比如把user表的信息都存在hash中,就會導致那個key非常大修壕,這樣就會導致某一個redis機器上的數(shù)據(jù)非常大愈捅,導致了數(shù)據(jù)傾斜)
list類型
可以實現(xiàn)常見的棧和隊列的數(shù)據(jù)結構,如下圖
阻塞隊列
Blocking MQ(阻塞隊列) = LPUSH + BRPOP( BRPOP會一直等待)
微信慈鸠,微博消息流
博主發(fā)消息直接發(fā)到粉絲的信息list中蓝谨,粉絲直接讀取即可,但是這種只適合粉絲比較少的情況
set類型應用場景
微信抽獎活動
- 點擊參與抽獎 sadd key {user_id}
- 查看所有抽獎用戶 smambers key
- 抽取count名中獎者 srandmember key count 或者 spop key count(spop從集合中取出數(shù)據(jù)后會刪除掉 適合不能重復抽獎的場景)
微信微博點贊的實現(xiàn)
- msg_id為朋友圈id user_id為點贊操作的用戶的id
- 點贊: sadd like:{msg_id} {user_id}
- 取消點贊: srem like:{msg_id} {user_id}
- 檢查用戶是否點過贊 : sismember like:{msg_id} {user_id}
- 獲取點贊用戶列表: smembers like:{msg_id}
- 獲取點贊用戶數(shù): scard like:{msg_id}
可以做一些簡單的推薦
用交集 差集等功能青团,做一些比較簡單的推薦
sinter
sunion
sdiff
注意 交集 差集運算速度比較慢譬巫,如果使用的話 最好用單獨的實例
zset
實現(xiàn)新聞排行榜
點擊新聞 zincrby news:date 1 news_id
展示當日排行前10 zrevrange news:date 0 9 withscores
展示7天排行榜
datalist為7天的日期 逐個枚舉
zunionstore news:datelist 7 news:date1 news:date2 。督笆。芦昔。。news:date7
展示7日排行前10
ZRANGE news:datelist 0 9 WITHSCORES