Redis C# 驱动 StackExchange.Redis 应用实例

时间:2022-05-28 17:25:20

StackExchange.Redis 是一个不错的 Redis C# 驱动,使用起来也相对比较简单。

1> 引用 StackExchange.redis

PM> Install-Package StackExchange.Redis

2> StackExchange.redsi 应用实例

由于 Redis 采用单线程单进程模型,所以 Redis 连接实例可以用单例来实现;

  public class RedisContextOpertion
{
private static ConnectionMultiplexer _redisConnection;
private static object objLock = new object();
static RedisContextOpertion()
{
if (_redisConnection == null)
{
lock (objLock)
{
if (_redisConnection == null)
{
//StackExchange.redsi 支持 Redis 集群;
// string connString = "127.0.0.1:6379,127.0.0.1:6380";
string connString = "127.0.0.1:6379";
_redisConnection
= ConnectionMultiplexer.Connect(connString);
}
}
}
}
public static ConnectionMultiplexer RedisConnection
{
get
{
return _redisConnection;
}
}
private RedisContextOpertion() { }

}

 调用方法:

var conn = RedisContextOpertion.RedisConnection;
var resisDb = conn.GetDatabase();

 StackExchang.redis 应用实例:

A :求有序集合(Sorted Sets)差集;


 构造有序集合数据源: key1,key2;

var conn = RedisContextOpertion.RedisConnection;
var redisDb = conn.GetDatabase();
SortedSetEntry[] entity
= new SortedSetEntry[] {new SortedSetEntry("a",100),new SortedSetEntry("b",200) };
SortedSetEntry[] entity1
= new SortedSetEntry[] { new SortedSetEntry("b", 200), new SortedSetEntry("c", 300) };
redisDb.SortedSetAdd(
"key1", entity, CommandFlags.None);
redisDb.SortedSetAdd(
"key2", entity1, CommandFlags.None);

 key1:

Redis C# 驱动 StackExchange.Redis 应用实例

key2:

Redis C# 驱动 StackExchange.Redis 应用实例

计算代码:

var conn = RedisContextOpertion.RedisConnection;
var redisDb = conn.GetDatabase();
//先求出两个集合的并集,同时设置重合项的乘法因子为 0(),设置聚合方式为取最小值;
//("weights", 1, 0)weights 为关健字,1 为key1的乘法因子,0为key2的乘法因子,有多个 key 时,以此类推;
redisDb.Execute("ZUNIONSTORE", "newkey", 2, "key1", "key2", "weights", 1, 0, "aggregate", "min");
//去除 score 为零的的元素,得到差集;
redisDb.Execute("ZREMRANGEBYSCORE", "newkey", 0, 0);
var queryResult = redisDb.SortedSetRangeByScoreWithScores("newkey");
Console.WriteLine("value\tscore");
foreach (var item in queryResult)
{
   Console.WriteLine("{0}\t{1}",item.Element,item.Score);

 计算结果:

Redis C# 驱动 StackExchange.Redis 应用实例

 注意事项:此方法不能在 Redis 集群环境中运行,因为 Redis 不支持跨节点调用,也就是说 Redis  Cluser 不支持,带有两个或以上 key 的命令;如果想要在集群环境中应用,就必需要保证 key1 和 key2 存放在同一个 hash 槽内,以下实例研究实现不同的key存放在同一个 hash 槽内;

B:Redis 集群环境中,不同 key 存放在同一 hash 槽内