初探Redis-基礎型別SortedSet
阿新 • • 發佈:2020-08-09
Redis存在五種基礎型別:字串(String)、列表(List)、雜湊(Hash)、集合(Set)、有序集合(Sorted Set)。本次列舉出Sorted Set的常用操作。
Redis官網:https://redis.io/
一、有序集合(SortedSet)介紹
Redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個float型別的分數(score)。通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。 集合中最大的成員數為 232
二、有序集合(SortedSet)相關操作Api
- 新增值
- 刪除值
- 刪除key下指定索引範圍內的值
- 刪除key下指定字典區間範圍內的值
- 刪除key下指定分數範圍內的值
- 獲取key下值的總數量
- 獲取key下指定分數範圍內值的總數量
- 獲取key下指定字典範圍內值的總數量
- 獲取key下索引範圍內的值
- 獲取key下指定分數範圍內的值
- 獲取key下指定字典區間範圍內的值
- 返回值相應索引
- 返回值相應分數
- 增加分數
三、有序集合(SortedSet)間相關操作Api
- 多個key做並集並存儲在新key中
- 多個key做交集並存儲在新key中
- 迭代獲取集合中匹配的資料
四、有序集合(SortedSet)簡單應用場景
簡單模擬排行榜場景,對於蜀國貢獻值排行高低,有蜀國成員負責實時生成貢獻值,通過檢視蜀國貢獻排行榜可以實時獲取排行情況。
1、啟用一個執行緒生存各成員貢獻值
Task.Run(() => { while (true) {foreach (var user in UserList) { Thread.Sleep(10); service.SortedSetAdd("蜀國貢獻值", user, new Random().Next(1, 100)); } Thread.Sleep(20 * 1000); } });
2、啟用一個執行緒實時展示貢獻值排行榜
Task.Run(() => { while (true) { Thread.Sleep(12 * 1000); Console.WriteLine("**********當前排行************"); int i = 1; var items = service.SortedSetRangeByRankWithScores<string>("蜀國貢獻值", 0, -1, true); foreach (var item in items) { Console.WriteLine($"第{i++}名 {item.Key} 分數{item.Value}"); } } });
3、效果展示,可以看到實時排行情況,結合UI呈現的話,可以做到實時榜單。
倉庫地址:https://gitee.com/530521314/Partner.TreasureChest.git(RedisOperate資料夾)
2020-08-09,望技術有成後能回來看見自己的腳步