使用WeihanLi.Redis操作Redis
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: weihanli@outlook.com
使用WeihanLi.Redis操作Redis的更多相关文章
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- Spring Boot使用Spring Data Redis操作Redis(单机/集群)
说明:Spring Boot简化了Spring Data Redis的引入,只要引入spring-boot-starter-data-redis之后会自动下载相应的Spring Data Redis和 ...
- 使用Spring Data Redis操作Redis(单机版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- [Reprinted] 使用Spring Data Redis操作Redis(一) 很全面
Original Address: http://blog.csdn.net/albertfly/article/details/51494080
- 使用Python操作Redis
1. 安装pyredis 首先安装pip 1 2 3 4 5 6 7 8 <SHELL># apt-get install python-pip ...... <SHELL> ...
- Ubuntu 15.10 下Scala 操作Redis Cluster
1 前言 Redis Standalone,Redis Cluster的安装在前面介绍过,地址:http://www.cnblogs.com/liuchangchun/p/5063477.html,这 ...
- c# 使用protobuf格式操作 Redis
protobuf格式介绍 1.protobuf为goole定义的类似于json的数据格式.2.最终都需要序列化为二进制形式进行传输存储.3.相对于xml,json格式来说,序列化为二进制后占用空间更小 ...
- 使用Python操作Redis应用场景
1. 安装pyredis 首先安装pip 1 2 3 4 5 6 7 8 <SHELL># apt-get install python-pip ...... <SHELL> ...
- Python操作Redis、Memcache
今天主要介绍如何通过python来对Redis和memcache进行操作,下面开始今天的内容: 一.Memcached操作 Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web ...
随机推荐
- hdu-2639 Bone Collector II---第k大背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2639 题目大意: 求第k大背包. 思路: 由01背包递推式dp[i][j] = max(dp[i][ ...
- urllib.parse.urlencode
urllib.request.urlopen(url,data,timeout) 其中如果data被赋值,则请求的方式就会由get转为post,而post需要提供一些待处理的数据. 这些待处理的数据需 ...
- UOJ #30. 【CF Round #278】Tourists
Description Cyberland 有 n 座城市,编号从 1 到 n,有 m 条双向道路连接这些城市.第 j 条路连接城市 aj 和 bj.每天,都有成千上万的游客来到 Cyberland ...
- APIO 2013
这套好丧--跟别的画风好不一样(中国风?).提答没做也没测,假装只有两题吧.140/200 T1.ROBOTS 题目大意:h*w的网格上有n个机器人编号1~n,网格上有空地.墙.顺/逆时针转向器,每次 ...
- [bzoj4866] [Ynoi2017]由乃的商场之旅
来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...
- bzoj4011[HNOI2015]落忆枫音 dp+容斥(?)
4011: [HNOI2015]落忆枫音 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1125 Solved: 603[Submit][Statu ...
- 使用rsync在windows(服务端)与linux(客户端)之间同步
说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...
- Serpent.AI – 游戏代理框架(Python)
Serpent.AI - 游戏代理框架(Python) Serpent.AI是一个简单而强大的新颖框架,可帮助开发人员创建游戏代理.将您拥有的任何视频游戏变成一个成熟的实验的沙箱环境,所有这些都是熟悉 ...
- java HTTP请求工具
package HttpRequestTest; import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- IOS charles抓包HTTP
charles通常用来截取本地的网络封包,但也可以用它来截取其他设备上的网络请求.本篇以IOS为例,讲解如何进行相应的操作. 1.charles上的设置 要截取iphone上的网络请求,我们要先将ch ...