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:
key2:
计算代码:
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 集群环境中运行,因为 Redis 不支持跨节点调用,也就是说 Redis Cluser 不支持,带有两个或以上 key 的命令;如果想要在集群环境中应用,就必需要保证 key1 和 key2 存放在同一个 hash 槽内,以下实例研究实现不同的key存放在同一个 hash 槽内;
B:Redis 集群环境中,不同 key 存放在同一 hash 槽内