redis使用案例

1.計數器 string
單線程,避免併發問題,保證不會出錯,毫秒級性能
命令:INCRBY incrby

2.隊列 list 簡單消息隊列、用戶第幾個訪問、新聞列表排序
因爲redis把數據添加到隊列是返回添加元素在隊列的第幾位,因此能夠作判斷用戶是第幾個訪問這種業務
新聞列表頁面最新的新聞列表,redis的 LPUSH命令構建List

3.在線狀態、簽到(大數據處理)
幾億用戶系統的簽到,去重登陸次數統計,用戶是否在線狀態
setbit、getbit、bitcount命令

原理是:
redis內構建一個足夠長的數組,每一個數組元素只能是0和1兩個值
數組的下標index用來表示咱們上面例子裏面的用戶id

4.hash實現冪等性請求
(hash實現冪等性請求)驗證前端的重複請求,經過redis進行過濾:每次請求將request ip、參數、接口等hash做爲key存儲redis,設置多長時間有效期,而後下次請求過來的時候先在redis中檢索有沒有這個key,進而驗證是否是必定時間內過來的重複提交

5.秒殺系統(防止超賣),單線程特徵,自增,無併發問題 string

6.全局增量ID生成 生成全局惟一商品序列號、插入數據重複問題

7.排行榜 zrevrank 查看前n名 ZRANGE 查看全部排名 O(log(N))

誰得分高誰排名往上。命令:ZADD(有序集)

給Alice投票 redis> zincrby vote_activity 1 Alice "1"

給Bob投票 redis> zincrby vote_activity 1 Bob "1"

給Alice投票 redis> zincrby vote_activity 1 Alice "2"

查看Alice投票數 redis> zscore vote_activity Alice ----"2"

獲取Alice排名(從高到低,zero-based ) redis> zrevrank vote_activity Alice (integer) 0

獲取前10名(從高到低) redis> zrevrange vote_activity 0 9 1) "Alice" 2) "Bob"

獲取前10名及對應的分數(從高到低) redis> zrevrange vote_activity 0 9 withscores "Alice" "2" "Bob" "1"

獲取總參與選手數 redis> zcard vote_activity (integer) 2

score相同,排序邏輯是按照key的字母序排序,同分數狀況下按時間排序,key加上時間戳前綴

經過ZRANK能夠快速獲得用戶的排名

經過ZRANGE能夠快速獲得TOP N的用戶列表,它們的複雜度都是O(log(N)),前端

更多技術諮詢可關注:gzitcastredis

相關文章
相關標籤/搜索