Redis学习系列六ZSet(有序列表)及Redis数据结构的过期

Redis的ZSet结合了Hash集合和Set的特性,允许设置权重进行排序,适用于用户成绩排序等场景。ZSet内部使用跳跃列表实现。此外,介绍了如何为Redis数据结构设置过期时间,当时间到达,Redis会自动删除对象,过期是针对最外层键进行的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 一、简介

ZSet可以说是Redis中最有趣的数据结构了,因为他兼具了Hash集合和Set的双重特性,也是用的最多的,保证了value值的唯一性的同时,,同时又保证了高性能,最主要的是还可以给每个Value设置Source(权重),那么我们就可以通过权重进行排序,这在业务上是非常常见的,比如很多地方需要,比如我们需要对所有用户的数学成绩进行排序.对英语等等地例子比比皆是,那么通过ZSet,你将会得到一个响应速度非常快的过程.下面会介绍.

ZSet的内部原理是通过跳跃列表来实现的,这里还是不想说太多关于算法的东西.

 

二、ZSet(有序列表)实战

下面就通过一个列子来讲解,主要是给所有用户的数学成绩进行排序的例子.代码开始在前面的随笔上进行扩展.

C#控制台:

给RedisClient.cs扩展如下几个方法:

  /// <summary> 
        /// 异步不带权重的向有序列表批量插入数据
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static async Task<long> SortedSetAddAsync(RedisKey key, SortedSetEntry[] entries)
        {
            var db = GetDatabase();
            return await db.SortedSetAddAsync(key, entries);
        }

        /// <summary> 
        /// 异步带权重的向有序列表插入单个元素,不管是否存在已有元素,都执行插入操作
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static async Task<RedisValue> SortedSetAddAsync(RedisKey key, RedisValue value,double source)
        {
            var db = GetDatabase();
            return await db.SortedSetAddAsync(key, value, source);
        }

        /// <summary>
        /// 异步按权重(范围为负无穷大到正无穷大排序)得到所有的元素,返回的元素(不包含权重)集合默认的排序时按权重从低到高,可指定权重
        /// </summary>
        /// <param name="key"></param>
        /// <param name="start">权重下限</param>
        /// <param name="stop">权重上限</param>
        /// <returns></returns>
        public static async Task<RedisValue[]> SortedSetRangeByScoreAsync(RedisKey key, double start = double.NegativeInfinity, double stop = double.PositiveInfinity)
        {
            var db = GetDatabase();
            return await db.SortedSetRangeByScoreAsync(key, start, stop);
        }

        /// <summary>
        /// 异步按权重(范围为负无穷大到正无穷大排序)得到所有的元素,返回的元素(包含权重)集合默认的排序时按权重从低到高,可指定权重
        /// </summary>
        ///
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值