1. 程式人生 > 實用技巧 >初探Redis-基礎型別SortedSet

初探Redis-基礎型別SortedSet

  Redis存在五種基礎型別:字串(String)、列表(List)、雜湊(Hash)、集合(Set)、有序集合(Sorted Set)。本次列舉出Sorted Set的常用操作。

  Redis官網:https://redis.io/

一、有序集合(SortedSet)介紹

  Redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個float型別的分數(score)。通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,分數(score)可以重複。集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。 集合中最大的成員數為 232

- 1 (4294967295, 每個集合可儲存40多億個成員)。

  

二、有序集合(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,望技術有成後能回來看見自己的腳步