redis使用案例

2021-09-25 21:35:45 字數 1290 閱讀 2414

1.計數器 string

單執行緒,避免併發問題,保證不會出錯,毫秒級效能

命令:incrby incrby

2.佇列 list 簡單訊息佇列、使用者第幾個訪問、新聞列表排序

由於redis把資料新增到佇列是返回新增元素在佇列的第幾位,所以可以做判斷使用者是第幾個訪問這種業務

新聞列表頁面最新的新聞列表,redis的 lpush命令構建list

原理是:

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)),

Redis之事務案例

一次執行多個命令,本質是一組命令的集合。乙個事務中的所有命令都會序列化,按順序地序列化執行而不會被其它命令插入,不許加塞。乙個佇列中,一次性 順序性 排他性的執行一系列命令。單獨的隔離操作 事務中的所有命令都會序列化 按順序地執行。事務在執行的過程中,不會被其他客戶端傳送來的命令請求所打斷 沒有隔離...

redis分頁查詢案例

redis的分頁查詢利用到了sortset 和 hash的兩個資料型別,這兩個互相配合使用才能完美的完成分頁,思想都在都在 中 1.初始邏輯 override public listselectall return users else 2.優化後 1.建立redisutil component p...

redis預估記憶體應用案例

要估算redis中的資料佔據的記憶體大小,需要對redis的記憶體模型有比較全面的了解,包括前面介紹的hashtable sds redisobject 各種物件型別的編碼方式等。下面以最簡單的字串型別來進行說明。假設有90000個鍵值對,每個key的長度是7個位元組,每個value的長度也是7個位...