前言
稍微复杂一点的互联网项目,技术选型都会涉及Redis,.NetCore的生态越发完善,支持.NetCore的Redis客户端越来越多,
下面三款常见的Redis客户端,相信大家平时或多或少用到一些,结合三款客户端的使用经历,有些心得体会。
先比较宏观的背景:
使用心得
三款客户端Redis支持的连接字符串配置基本相同
'connectionstrings': {
'redis': 'localhost:6379,password=abcdef,connectTimeout=5000,writeBuffer=40960'
}
1. StackExchange.Redis
定位是高性能、通用的Redis .Net客户端;方便地应用Redis全功能;支持Redis Cluster高性能的核心在于:多路复用连接(允许有效使用来自多个调用线程的共享连接), 服务器端操作使用ConnectionMultiplexer类ConnectionMultiplexer redis = ConnectionMultiplexer.Connect('server1:6379,server2:6379');
// 日常应用的核心类库是IDatabase
IDatabase db = redis.GetDatabase();
// 支持Pub/Sub
ISubscriber sub = redis.GetSubscriber();
sub.Subscribe('messages', (channel, message) => {
Console.WriteLine((string)message);
});
---
sub.Publish('messages', 'hello');也正是因为多路复用,StackExchange.Redis唯一不支持的Redis特性是 'blocking pops',这个特性是RedisMQ的关键理论。如果你需要blocking pops, StackExchange.Redis官方推荐使用pub/sub模型模拟实现。日常操作API请关注IDatabase接口,支持异步方法,这里我对【客户端操作Redis尽量不要使用异步方法】的说法不敢苟同,对于异步方法我认为还是遵守微软最佳实践:对于IO密集的操作,能使用异步尽量使用异步
// 对应redis自增api:DECR mykey
_redisDB0.StringDecrementAsync('ProfileUsageCap', (double