如何在 .NET Core 中使用 Redis

690 阅读2分钟
  • 本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如何在.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);
}

image.png 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)));
}

image.png 语法简单,实现起来非常的容易,大家可以自己动手使用试试。

总结

CSRedis 完美的在项目中让我非常简单,非常方便的就能使用Redis缓存,在一些特定场景下,减少了数据库压力,增加了用户体验,当然本文只展示了其中的一小部分语法跟功能,内容太多,无法一文概括完,感兴趣的朋友也可以去阅读源码,或者自己创建一个项目实际操作体验。