- 本文已参与「新人创作礼」活动,一起开启掘金创作之路。
如何在.NET Core安装配置Redis?
安装
我平时使用的是CSRedis这个开源库,它的NuGet包为 CSRedisCore。关于为什么使用它,我认为他有如下几个优点。
- 支持集群
- 支持操作多个Database
- 支持 Subscribe/Publish
- 分区模式多个节点分区分担存储压力
- 语法、配置简单,低门槛高性能
配置
便于理解本文中只有一个项目,如果有分层项目请合理将该配置文件放入对应模块。首先我们在根目录建一个Redis目录存放RedisManagement类。
/// <summary>
/// Redis管理器
/// </summary>
public class RedisManagement
{
public static void Init(IConfiguration configuration)
{
//读取appsetting配置
var dataBaseId = int.Parse(configuration["RedisConnection:DatabaseId"]);
var connection = configuration["RedisConnection:ConnectionString"];
if (!connection.Contains("defaultDatabase"))
{
connection += ",defaultDatabase=" + dataBaseId;
}
//创建Redis连接
var redisClient = new CSRedis.CSRedisClient(connection);
//初始化Redis
WebApiRedisHelper.Initialization(redisClient);
}
}
/// <summary>
/// 服务
/// </summary>
public abstract class WebApiRedisHelper : RedisHelper<WebApiRedisHelper> { }
appsetting.json配置如下
"RedisConnection": {
"ConnectionString": "127.0.0.1:6379",
"DatabaseId": 1
}
新建RedisManagement类主要是为了方便管理。在类里配置之后我们需要到Program(.NET6)下面版本配在StartUp类初始化
RedisManagement.Init(builder.Configuration); //非常简单
注意:CSRedis连接字符串提供了几个参数
- defaultDatabase:默认数据库
- poolsize:连接池的大小
- password:密码
- connectTimeout:超时时间设置
使用
使用也非常的简单,我们在上文中简单的配置了一个Redis管理静态类,只要引用对应的命名空间即可直接使用Redis,如下代码。
public bool RedisSetValue(UserInfo user)
{
if (user == null)
return false;
// Key为userKey Value为方法传入的UserInfo expireSeconds第三个参数代表过期时间单位是秒
return WebApiRedisHelper.Set("userKey", user, 120);
}
public async Task<UserInfo> RedisGetValue(string key)
{
if (string.IsNullOrWhiteSpace(key))
return null;
// 这里指定了泛型,可以根据Key获取Value的时候进行转换
return await WebApiRedisHelper.GetAsync<UserInfo>(key);
}
RedisHelper类提供了许多的方法与功能,就不一一跟大家演示,也是支持异步写法的,非常的简单,方便。
发布订阅模式
也类似于消息队列Subscribe/Publish 生产者与消费者通信,如下代码会为大家展示如何使用CSRedis实现
public async Task RedisPublish()
{
//使用PublishAsync生产者
await WebApiRedisHelper.PublishAsync("channel1", "这是一条测试消息!");
}
我们另起一个控制台程序来创建一个消费者来接收消息,代码如下!
static void Main(string[] args)
{
var client = new CSRedisClient("127.0.0.1:6379,defaultDatabase=1");
RedisHelper.Initialization(client);
// 订阅消息 Body是消息内容体
client.Subscribe(("channel1", msg => Console.WriteLine(msg.Body)));
}
语法简单,实现起来非常的容易,大家可以自己动手使用试试。
总结
CSRedis 完美的在项目中让我非常简单,非常方便的就能使用Redis缓存,在一些特定场景下,减少了数据库压力,增加了用户体验,当然本文只展示了其中的一小部分语法跟功能,内容太多,无法一文概括完,感兴趣的朋友也可以去阅读源码,或者自己创建一个项目实际操作体验。