本系列将和大家分享Redis分布式缓存,本章主要简单介绍下Redis中的ZSet类型,以及如何使用Redis解决实时排行榜问题。
本系列将和大家分享Redis分布式缓存,本章主要简单介绍下Redis中的ZSet类型,以及如何使用Redis解决实时排行榜问题。
Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列。
ZSet类型最大的特点就是有序、去重,以及交集、并集的使用。
存储形式:key--SortList
首先先给大家Show一波Redis中与ZSet类型相关的API:
using System.Collections.Generic;namespace TianYa.Redis.Service{ /// /// Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列 /// 1、带有权重的元素,比如一个游戏的用户得分排行榜 /// 2、比较复杂的数据结构,一般用到的场景不算太多 /// public class RedisZSetService : RedisBase { #region 添加 /// /// 添加setId/value,默认分数是从1.多*10的9次方以此递增的,自带自增效果 /// public bool AddItemToSortedSet(string setId, string value) { return base._redisClient.AddItemToSortedSet(setId, value); } /// /// 添加setId/value,并设置value的分数 /// public bool AddItemToSortedSet(string setId, string value, double score) { return base._redisClient.AddItemToSortedSet(setId, value, score); } /// /// 为setId添加values集合,values集合中每个value的分数设置为score /// public bool AddRangeToSortedSet(string setId, List values, double score) { return base._redisClient.AddRangeToSortedSet(setId, values, score); } /// /// 为setId添加values集合,values集合中每个value的分数设置为score /// public bool AddRangeToSortedSet(string setId, List values, long score) { return base._redisClient.AddRangeToSortedSet(setId, values, score); } #endregion 添加 #region 获取 /// /// 获取setId的所有集合 /// public List GetAllItemsFromSortedSet(string setId) { return base._redisClient.GetAllItemsFromSortedSet(setId); } /// /// 获取setId的所有集合,倒叙输出 /// public List GetAllItemsFromSortedSetDesc(string setId) { return base._redisClient.GetAllItemsFromSortedSetDesc(setId); } /// /// 获取集合,带分数 /// public IDictionary GetAllWithScoresFromSortedSet(string setId) { return base._redisClient.GetAllWithScoresFromSortedSet(setId); } /// /// 获取setId集合中值为value的下标值 /// public long GetItemIndexInSortedSet(string setId, string value) { return base._redisClient.GetItemIndexInSortedSet(setId, value); } /// /// 倒叙排列获取setId集合中值为value的下标值 /// public long GetItemIndexInSortedSetDesc(string setId, string value) { return base._redisClient.GetItemIndexInSortedSetDesc(setId, value); } /// /// 获取setId集合中值为value的分数 /// public double GetItemScoreInSortedSet(string setId, string value) { return base._redisClient.GetItemScoreInSortedSet(setId, value); } /// /// 获取setId集合中所有数据的总数 /// public long GetSortedSetCount(string setId) { return base._redisClient.GetSortedSetCount(setId); } /// /// setId集合数据从分数为fromScore到分数为toScore的数据总数 /// public long GetSortedSetCount(string setId, double fromScore, double toScore) { return base._redisClient.GetSortedSetCount(setId, fromScore, toScore); } /// /// 获取setId集合从高分到低分排序数据,分数从fromScore到分数为toScore的数据 /// public List GetRangeFromSortedSetByHighestScore(string setId, double fromScore, double toScore) { return base._redisClient.GetRangeFromSortedSetByHighestScore(setId, fromScore, toScore); } /// /// 获取setId集合从低分到高分排序数据,分数从fromScore到分数为toScore的数据 /// public List GetRangeFromSortedSetByLowestScore(string setId, double fromScore, double toScore) { return base._redisClient.GetRangeFromSortedSetByLowestScore(setId, fromScore, toScore); } /// /// 获取setId集合从高分到低分排序数据,分数从fromScore到分数为toScore的数据,带分数 /// public IDictionary GetRangeWithScoresFromSortedSetByHighestScore(string setId, double fromScore, double toScore) { return base._redisClient.GetRangeWithScoresFromSortedSetByHighestScore(setId, fromScore, toScore); } /// /// 获取setId集合从低分到高分排序数据,分数从fromScore到分数为toScore的数据,带分数 /// public IDictionary GetRangeWithScoresFromSortedSetByLowestScore(string setId, double fromScore, double toScore) { return base._redisClient.GetRangeWithScoresFromSortedSetByLowestScore(setId, fromScore, toScore); } /// /// 获取setId集合数据,下标从fromRank到下标为toRank的数据 /// public List GetRangeFromSortedSet(string setId, int fromRank, int toRank) { return base._redisClient.GetRangeFromSortedSet(setId, fromRank, toRank); } /// /// 获取setId集合倒叙排列数据,下标从fromRank到下标为toRank的数据 /// public List GetRangeFromSortedSetDesc(string setId, int fromRank, int toRank) { return base._redisClient.GetRangeFromSortedSetDesc(setId, fromRank, toRank); } /// /// 获取setId集合数据,下标从fromRank到下标为toRank的数据,带分数 /// public IDictionary GetRangeWithScoresFromSortedSet(string setId, int fromRank, int toRank) { return base._redisClient.GetRangeWithScoresFromSortedSet(setId, fromRank, toRank); } /// /// 获取setId集合倒叙排列数据,下标从fromRank到下标为toRank的数据,带分数 /// public IDictionary GetRangeWithScoresFromSort.........