初探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多亿个成员)。

161451974_bc2e712b-1661-47b4-ad42-83aba09d56f4  

有序集合(SortedSet)相关操作Api

添加值 161453733_49438b18-9023-434d-8992-c6b2182c99fa

161455012_b0454916-b9b3-4f60-8b52-d7629d42ff6f

删除值 161456191_1879769d-4bfd-4f73-b72d-768450e0d00b

161457581_d0c0e188-c9f4-4921-aaf4-8f4f13c34e11

删除key下指定索引范围内的值 161458714_cf89aaae-2c9d-4ac6-a3fb-907d38721306

161459851_3d0e7197-0b8c-4212-9b47-023391c42b07 

删除key下指定字典区间范围内的值 161501007_be77ba7c-18c5-440b-bbec-2963c71760ac

161502365_4a1f7b62-fb89-4c76-8a0c-2cfd92a88ea5

删除key下指定分数范围内的值 161503759_3c339089-8bc6-4466-8a8e-21d3f223b23a

161504998_323c175c-023b-4b59-bbd5-0db55f28e095

获取key下值的总数量 161506125_9b7d0c36-6f3b-4809-8e84-1bd1f9f1f5af

161507281_69fb3e76-08a8-4b3f-bc11-24030b460538 

获取key下指定分数范围内值的总数量 161508446_1c66c9e8-c736-4284-89b6-320c598b6ab8

161509613_2e408650-1aae-448b-b98a-7dda40567fa7

获取key下指定字典范围内值的总数量 161510788_f7a2c810-3fe5-4d2b-bc17-11e6e8aff46c

161511980_24cad29d-71e8-4045-b61b-8d19b4e12bc3

获取key下索引范围内的值 161513273_ceb46cfb-eff0-4a62-aaca-ac2c9f595a4d

161514973_69fa9eba-8ea8-462c-94d7-49b47bc5ae19

获取key下指定分数范围内的值 161516152_3a0c3f25-682a-4a79-829d-815fbf5bda21

161517267_17fb9062-8771-48f4-a625-12477fbf17f1

获取key下指定字典区间范围内的值 161518367_d62dd623-a607-4fc2-89e6-382994fc2589

161519813_4ee6a4f6-f396-43ad-aeb6-7252a37b9e3e

返回值相应索引 161521010_a9db48dc-5fb4-4cc1-93d8-5ba8ac960671

161522210_555bb32f-f0cd-4a3e-b6e5-3bc642453623

返回值相应分数 161523359_3c7a904b-e13a-44d6-832e-171f89a71204

161524463_3ace03f0-c5f5-42d0-86f5-e9f8b57d358d

增加分数

161525582_7eebd79b-2192-4182-ba71-05dfeb3987da 161526872_6baa1cf3-fcc2-49fd-966e-3b56be456d11  

有序集合(SortedSet)间相关操作Api

多个key做并集并存储在新key中 161528068_8e3c1773-1fc2-4852-8d09-c3957ed35551

161529907_03fe577f-1140-4784-86c1-a0fb198bd501

多个key做交集并存储在新key中 161531072_0474aa9e-8d75-4224-8fa1-417abc010aec

161532637_0d4530ba-95cd-4a0c-bf7e-e4d4e83840e7

迭代获取集合中匹配的数据 161533796_84578815-77be-465a-94f4-408a9faa673c

161535034_07b5f1bf-9b15-4a82-ae71-6403d7e38bf3  

有序集合(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);
    }
});
  1. 启用一个线程实时展示贡献值排行榜
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}");
        }
    }
});
  1. 效果展示,可以看到实时排行情况,结合UI呈现的话,可以做到实时榜单。

161536327_6c27f60a-83c7-47e8-93ca-961754076113

 

仓库地址:https://gitee.com/530521314/Partner.TreasureChest/tree/master/RedisOperate

2020-07-05,望技术有成后能回来看见自己的脚步