WeihanLi.Redis
Intro
StackExchange.Redis 扩展,更简单的泛型操作,并提供一些的适用于业务场景中的扩展
基于 Redis 的五种数据类型扩展出了一些应用:
-
String
- Cache
- Counter
- Firewall
- RedLock
-
Hash
-
List
-
Set
-
SortedSet
GetStarted
Install
Install from Nuget
Configuration 配置
RedisManager.AddRedisConfig(config =>
{
config.CachePrefix = "WeihanLi.Redis.UnitTest";
config.ChannelPrefix = "WeihanLi.Redis.UnitTest";
});
.net core 应用,还可以这样配置
serviceCollection.AddRedisConfig(config =>
{
config.CachePrefix = "WeihanLi.Redis.UnitTest";
config.ChannelPrefix = "WeihanLi.Redis.UnitTest";
config.EnableCompress = false;// disable compress
});
Basic usage 基本用法
-
Cache 缓存
缓存的基本操作主要是基于 RedisManager.CacheClient
缓存的基本操作定义在 ICacheClient 中,基本操作如下:
var key = "test111";
var value = "Hello WeihanLi.Redis";
Assert.True(RedisManager.CacheClient.Set(key,value));
Assert.True(RedisManager.CacheClient.Exists(key));
Assert.Equal(value,RedisManager.CacheClient.Get(key));
Assert.True(RedisManager.CacheClient.Remove(key));
Assert.False(RedisManager.CacheClient.Exists(key));
RedisManager.CacheClient.GetOrSet(key,() => value,TimeSpan.FromSeconds(10));
-
Counter 计数器
var counterName = "counterTest";
var counterClient = RedisManager.GetCounterClient(counterName,TimeSpan.FromSeconds(60));
Assert.Equal(0,counterClient.Base);
Assert.Equal(0,counterClient.Count());
counterClient.Increase();
Assert.Equal(1,counterClient.Count());
counterClient.Increase(5);
Assert.Equal(6,counterClient.Count());
counterClient.Decrease(3);
Assert.Equal(3,counterClient.Count());
Assert.True(counterClient.Reset());
Assert.Equal(0,counterClient.Count());
-
Firewall 防火墙
var firewallName = "firewallTest";
var firewallClient = RedisManager.GetFirewallClient(firewallName,TimeSpan.FromSeconds(3));
Assert.True(firewallClient.Hit());
Assert.False(firewallClient.Hit());
await Task.Delay(TimeSpan.FromSeconds(3));
Assert.True(firewallClient.Hit());
-
RedLock Redis分布式锁
using (var client = RedisManager.GetRedLockClient("redLockTest"))
{
Assert.True(client.TryLock(TimeSpan.FromSeconds(10)));
using (var client1 = RedisManager.GetRedLockClient("redLockTest"))
{
Assert.False(client.TryLock(TimeSpan.FromSeconds(10)));
Assert.False(client1.Release());
}
Assert.True(client.Release());
}
var key = Guid.NewGuid().ToString("N");
using (var client = RedisManager.GetRedLockClient(key))
{
Assert.True(client.TryLock(TimeSpan.FromSeconds(20)));
}
using (var client = RedisManager.GetRedLockClient(key))
{
Assert.True(client.TryLock(TimeSpan.FromMinutes(3)));
Assert.True(client.Release());
}
-
Rank 排行榜
var rankClient = RedisManager.GetRankClient<string>("testRank");
Assert.Equal(0,rankClient.Length());
rankClient.Add("xiaoming",100);
rankClient.Add("xiaohong",95);
rankClient.Add("xiaowang",96);
Assert.Equal(3,rankClient.Length());
Assert.Equal(100,rankClient.Score("xiaoming"));
var rank = rankClient.RangeByScore();
Assert.Equal("xiaohong",rank[0]);
rank = rankClient.RangeByScore(order: Order.Descending);
Assert.Equal("xiaoming",rank[0]);
var common = RedisManager.GetCommonRedisClient(RedisDataType.Rank);
Assert.True(common.KeyDelete("testRank"));
-
更多用法等你来发现...
Conatct
Contact me: weihanli@outlook.com (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|