WeihanLi.Redis
Intro
StackExchange.Redis 扩展,更简单的泛型操作,并提供一些的适用于业务场景中的扩展
基于 Redis 的五种数据类型扩展出了一些应用:
-
String
- Cache
- Counter
- Firewall
- RedLock
-
Hash
- Hash
- Dictonary
-
List
- List
-
Set
- Set
-
SortedSet
- SortedSet
- Rank
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: [email protected]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。