redis 應用場景
阿新 • • 發佈:2020-07-19
redis應用場景:
一.string
1.快取
簡單key-value儲存
2.分散式鎖
setnx key value,當key不存在時,將 key 的值設為 value ,返回1
若給定的 key 已經存在,則setnx不做任何動作,返回0。
當setnx返回1時,表示獲取鎖,做完操作以後del key,表示釋放鎖,如果setnx返回0表示獲取鎖失敗。
3.計數器
如知乎每個問題的被瀏覽器次數
set key 0 incr key // incr readcount::{帖子id} 每閱讀一次 get key // get readcount::{帖子id} 獲取閱讀量
二.hash
比如我們要儲存使用者資訊,ID、姓名、電話、年齡、身高 ,怎麼儲存?
key = userdata使用者ID
hashKey = 姓名,value = xx
hashKey = 電話,value = xx
hashKey = 年齡,value = xx
hashKey = 身高,value = xx
查詢時,取出key即可。
//新增 $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); $redis->hSet(key, hashKey, value); //編輯 $redis->hSet(key, hashKey, value); //查詢 $redis->hGetAll(key); //查詢所有屬性 $redis->hGet(key, hashKey); //查詢某個屬性
三.list
佇列:比如實現一個簡單的日誌收集功能或傳送大量簡訊、郵件的功能,實現方式是先將資料收集到佇列中,然後有一個定時任務去消耗佇列,處理該做的事情。
直接使用redis的rpush,lpop和lpush,rpop
//進佇列 $redis->lpush(key, value); //出佇列 $redis->rpop(key);
四.set
可以基於set做交集,並集,差集的操作。如把2個人的粉絲列表弄一個交集,就能看到兩個人的共同好友是誰
1.實現點贊,簽到,like等功能
//1001使用者給8001帖子點贊sadd like::8001 1001 srem like::8001 1001 //取消點贊 sismember like::8001 1001 //檢查使用者是否點過贊 smembers like::8001 //獲取點讚的使用者列表 scard like::8001 //獲取點贊使用者數
2.電商商品篩選:每個商品入庫的時候即會建立他的靜態標籤列表如,品牌,尺寸,處理器,記憶體
// 將拯救者y700P-001和ThinkPad-T480這兩個元素放到集合brand::lenovo sadd brand::lenovo 拯救者y700P-001 ThinkPad-T480 sadd screenSize::15.6 拯救者y700P-001 機械革命Z2AIR sadd processor::i7 拯救者y700P-001 機械革命X8TIPlus // 獲取品牌為聯想,螢幕尺寸為15.6,並且處理器為i7的電腦品牌(sinter為獲取集合的交集) sinter brand::lenovo screenSize::15.6 processor::i7 -> 拯救者y700P-001
五.zset
排序的set,可以去重還可以排序,寫進去的時候給一個分數,自動根據根據分數排序,分數可以自定義排序規則
redis的zset天生是用來做排行榜的、好友列表, 去重, 歷史記錄等業務需求
// user1的使用者分數為 10 zadd ranking 10 user1 zadd ranking 20 user2 // 取分數最高的3個使用者 zrevrange ranking 0 2 withscores