StackExchange.Redis 之 SortedSet 类型示例
1,增加操作
RedisCacheHelper.Instance.ZSortadd("zsortkey", "A1", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "B1", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "C1", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "D1", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "", );
RedisCacheHelper.Instance.ZSortadd("zsortkey", "", );
RedisCacheHelper.Instance.ZSortIncr("zsortkey", "D1", ); //增加2
RedisCacheHelper.Instance.ZSortDecr("zsortkey", "A1", ); //减去1
//获取长度
var getlength = RedisCacheHelper.Instance.SortedSetLength("zsortkey");
Console.WriteLine(getlength); //移除某个元素
var getok = RedisCacheHelper.Instance.ZSortedRemove("zsortkey", "");
Console.WriteLine(getok); //获取榜单某个元素的排名
var getsort = RedisCacheHelper.Instance.ZSortedRank("zsortkey", "");
Console.WriteLine(getsort); //获取有序集合中的某个元素的值
//扩展的有
//SortedSetRangeByRank 根据索引获取member值,默认是升序,可以获取指定索引内的member值
//SortedSetRangeByScore:根据score获取member值,默认是升序,可以获取指定score开始和结束的member值,后面的skip和take用于分页
//SortedSetRangeByValue:根据member获取member值,默认是升序,可以获取指定member开始和结束的值,后面的skip和take用于分页
//SortedSetRangeByRankWithScores:获取member和score值,可以只返回 start-stop 这个索引排序内的值(默认升序),后面的skip和take用于分页 var getvalue = RedisCacheHelper.Instance.ZSortedScore("zsortkey", "");
Console.WriteLine(getvalue);
使用场景:
Redis sorted set 的使用场景与 set 类似,区别是 set 不是自动有序的,而 sorted set 可以通过用户额外提供一个优先级 (score) 的参数来为成员排序,并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择 sorted set 数据结构,比如 twitter 的 public timeline 可以以发表时间作为 score 来存储,这样获取时就是自动按时间排好序的。
实现方式:
Redis sorted set 的内部使用 HashMap 和跳跃表 (SkipList) 来保证数据的存储和有序,HashMap 里放的是成员到 score 的映射,而跳跃表里存放的是所有的成员,排序依据是 HashMap 里存的 score, 使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
这里附上Helper类
#region SortSet类型 有序集合 /// <summary>
/// 增加,可以一次增加一个member,也可以一次增加多个member
/// </summary>
/// <param name="key"></param>
/// <param name="member"></param>
/// <param name="score"></param>
/// <param name="db"></param>
/// <returns></returns>
public bool ZSortadd(string key, string member, double score, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return false;
else
return _db.SortedSetAdd(key, member, score);
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 对Score值自增
/// 如果不存在这member值,则执行增加member操作,并返回当前Score值
/// </summary>
/// <param name="key">The key.</param>
/// <param name="member">The member.</param>
/// <param name="score">The score.</param>
/// <param name="db">The database.</param>
/// <returns></returns>
public double ZSortIncr(string key, string member, double score, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return ;
else
return _db.SortedSetIncrement(key, member, score);
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 对Score值自减
/// 如果不存在这member值,则执行增加member操作,并返回当前Score值
/// </summary>
/// <param name="key">The key.</param>
/// <param name="member">The member.</param>
/// <param name="score">The score.</param>
/// <param name="db">The database.</param>
/// <returns></returns>
public double ZSortDecr(string key, string member, double score, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return ;
else
return _db.SortedSetDecrement(key, member, score);
}
catch (Exception ex)
{
throw;
}
} /// <summary>
/// 长度
/// </summary>
/// <param name="redisKey"></param>
/// <param name="db"></param>
/// <returns></returns>
public long SortedSetLength(string redisKey, int db = -)
{
var _db = GetDatabase(db);
return _db.SortedSetLength(redisKey);
} /// <summary>
/// 移除某个元素
/// </summary>
/// <param name="key"></param>
/// <param name="memebr"></param>
/// <param name="db"></param>
/// <returns></returns>
public bool ZSortedRemove(string key, string memebr, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return false;
else
return _db.SortedSetRemove(key, memebr); }
catch (Exception)
{
return false;
}
} /// <summary>
/// 获取榜单某个元素的排名、排行
/// </summary>
/// <param name="key"></param>
/// <param name="mumber"></param>
/// <param name="db"></param>
/// <returns></returns>
public double ZSortedRank(string key, string mumber, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return ;
else
return _db.SortedSetRank(key, mumber) ?? ; }
catch (Exception)
{
return ;
}
} /// <summary>
/// 获取有序集合中的某个元素的值
/// </summary>
/// <param name="key">The key.</param>
/// <param name="member">The member.</param>
/// <param name="db">The database.</param>
/// <returns></returns>
public double ZSortedScore(string key, string member, int db = -)
{
try
{
var _db = GetDatabase(db);
if ((object)key == null)
return ;
else
return Convert.ToDouble(_db.SortedSetScore(key, member));
}
catch (Exception ex)
{
throw;
}
} #endregion
StackExchange.Redis 之 SortedSet 类型示例的更多相关文章
- StackExchange.Redis 之 hash 类型示例
StackExchange.Redis 的组件封装示例网上有很多,自行百度搜索即可. 这里只演示如何使用Hash类型操作数据: // 在 hash 中存入或修改一个值 并设置order_hashkey ...
- StackExchange.Redis 之 String 类型示例
String类型很简单,就不做示例演示了,这里只贴出Helper类 /// <summary> /// 判断key是否存在 /// </summary> /// <par ...
- 怎样在Redis通过StackExchange.Redis 存储集合类型List
StackExchange 是由StackOverFlow出品, 是对Redis的.NET封装,被越来越多的.NET开发者使用在项目中. 绝大部分原先使用ServiceStack的开发者逐渐都转了过来 ...
- redis命令Sortedset 类型(八)
Sortedset又叫zset Sortedset是有序集合,可排序的,但是唯一. Sortedset和set的不同之处, 是会给set中的元素添加一个分数,然后通过这个分数进行排序. 命令 1> ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存操作所以速度飞快,常见用法是存用户token.短信验证码等 官网显示Redis本身并没有Wind ...
- Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager 转发非原创
Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager Redis缓存服务器是一款key/value数据库,读11 ...
- [转]Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
转自:http://www.cnblogs.com/oppoic/p/6165581.html Redis缓存服务器是一款key/value数据库,读110000次/s,写81000次/s,因为是内存 ...
- StackExchange.Redis 官方文档(五) Keys, Values and Channels
原文:StackExchange.Redis 官方文档(五) Keys, Values and Channels Keys, Values and Channels 在使用redis的过程中,要注意到 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...
随机推荐
- macOS Catalina 10.15版本下anaconda安装后navigator无法正常打开的解决方法
我最近用闲置的money购置了一个ipad,想利用ipad作为mac的复屏,但是这需要将macos升级到catalina才能支持这个功能,但是catalina的更新会导致很多软件都发生无法启动或一些奇 ...
- MySQL概述及入门(四)
MySql概述及入门(四) 什么是MySQL的锁? 数据库锁定机制,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则,简单说,就是不让别人动 总的来说,MySQL各 ...
- 应用场景不同,是无代码和低代码的最大区别 ZT
随着媒体对低代码.无代码等先进技术的持续关注,我们发现大多数人都听说过低代码开发和无代码开发这两个概念,但是对两者之间的区别其实并不清楚.事实上,低代码开发和无代码开发之间存在着很多非常显著的差异,如 ...
- C语言再学习part3—算法
君子远庖厨,万物皆备于我.—孟子 这篇文章主要总结程序的主要要素,以及程序的构成是什么样子的.最后说说我学到的一种奇特的表示算法的方式—伪代码. 让我们开始吧! 一个程序应该包括以下两个主要要素: 1 ...
- [CF1311C] Perform the Combo
Solution 前缀和搞一下即可 #include <bits/stdc++.h> using namespace std; #define int long long const in ...
- oracle数据库应用开发经验
l 日志表应该以时间做分区,方便清理 一般应用都会有一些表用来记录用户操作日志,数据变更记录,交易流水等日志型的库表.这些表最好按时间字段做分区,这样在迁移或者清理历史记录时会比较方便,借助orac ...
- Spring AOP-基于@AspectJ风格
关于Spring AOP,可以去看看官方文档: https://docs.spring.io/spring-framework/docs/current/spring-framework-refere ...
- 用浏览器的油猴子脚本调用IDM下载百度云盘中的资料
用浏览器的油猴子脚本调用IDM下载百度云盘中的资料(只能支持单个文件下载) 第一步需要现在浏览器中安装油猴子插件Tampermonkey.crx 安装油猴子插件插件主页:https://tamperm ...
- 【pattern】设计模式(2) - 模版方法模式
前言 一晃一年又过了,还是一样的渣. 一晃2周又过去了,还是没有坚持写博客. 本来前2天说填一下SQL注入攻击的坑,结果看下去发现还是ojdbc.jar中的代码,看不懂啊.这坑暂时填不动,强迫在元旦最 ...
- [THUSC2016]成绩单 [区间dp]
简单区间dp. 考虑 \(f_{i,j,mn,mx}\)表示 \(i,j\) 区间的最大值为 \(mx\),最小值为 \(mn\) 的最小花费,\(g_{i,j}\) 为删掉 \([i,j]\) 的最 ...