ASP.NET Core 高级之使用Redis缓存

阅读本文你的收获

  1. 了解Redis基本作用及其使用场景
  2. 学会安装Redis服务端和客户端及简单的命令行操作
  3. 学习在ASP.NET Core WebAPI项目中如何操作Redis缓存

一、Redis介绍

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。

  1. Redis支持丰富的数据类型,常用的如下:
  • string(字符串) // 是 redis 最基本的类型, string 可以包含任何数据,一个键最大能存储 512MB
  • hash(哈希) // hash 特别适合用于存储对象
  • list(列表) // 列表是简单的字符串列表,按照插入顺序排序。可以用作队列。
  • set(集合) //集合内元素的唯一性
  • zset (sorted set:有序集合)
  1. Redis的性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

  2. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

  3. Redis支持数据的高并发、高可用,如主从模式、哨兵模式、cluster集群模式

使用场景

  • 字符串(String): 最基本的数据类型,可以存储字符串、整数或浮点数。场景:缓存Session会话,计数器,流水号等。
  • 哈希/散列/字典(Hash):键值对的集合,可以在一个哈希数据结构中存储多个字段和值。场景:存电商的购物车信息
  • 列表(List):按照插入顺序存储一组有序的值,可以在列表的两端执行插入、删除和访问操作。场景:用作简单的消息队列。
  • 集合(Set):无序的唯一值集合。场景:实现抽奖,文章的点赞、评论。
  • 有序集合(Sorted Set):可以根据分数对成员进行排序,同时保持唯一性。场景:实现体育赛事排行榜,游戏积分榜,热销商品排行榜。

二、安装Redis服务端

  1. 将 安装包 Redis-x64-3.2.100.zip ,解压到C盘或D盘根目录下,就完成了安装。安装包下载

  2. 将以上安装目录添加到环境变量Path中,如下图:
    ASP.NET Core 高级之使用Redis缓存_第1张图片

  3. 设置Redis服务器的密码,打开安装目录下的redis.windows.conf配置文件,找到“requirepass”,设置为自己的密码。
    ASP.NET Core 高级之使用Redis缓存_第2张图片

  4. 启动Redis服务器。打开一个 命令行控制台窗口(小黑窗),cd命令切换到安装目录 ,输入以下命令启动

redis-server.exe redis.windows.conf

如下图:
ASP.NET Core 高级之使用Redis缓存_第3张图片

  1. 把Redis服务加入到Windows 服务中,让它开机自启动

在Redis的安装目录,打开cmd,然后输入以下命令:

安装服务的命令:
redis-server.exe --service-install redis.windows.conf --loglevel verbose 

卸载服务的命令:
redis-server --service-uninstall

以上步骤结束之后,在任务管理器的“服务”中,启动Redis服务
ASP.NET Core 高级之使用Redis缓存_第4张图片

三、Redis 客户端

3.1 redis-cli命令行

打开CMD或者PowerShell,命令提示符里,打开Redis的客户端,输入以下指令:

redis-cli -p 6379 -a 123456     

注:redis-cli为命令, 6379为Redis默认端口号, 123456为登录密码

ASP.NET Core 高级之使用Redis缓存_第5张图片

3.2 Redis GUI客户端

使用Redis Desktop Manager(简称RDM)桌面客户端进行访问;

ASP.NET Core 高级之使用Redis缓存_第6张图片

点击“确定”后连接上Redis服务器,并显示db0~db15共16个数据库
ASP.NET Core 高级之使用Redis缓存_第7张图片

四、ASP.NET Core中使用Redis

开发环境:

操作系统: Windows 10 专业版
平台版本是:.NET 6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022

ASP.NET Core中推荐使用FreeRedis客户端库来连接Redis服务器。

以下这些都是操作Redis的.NET客户端组件,为什么使用FreeRedis这个组件呢?

  1. ServiceStack.Redis 是商业版,免费版有限制;

  2. StackExchange.Redis 是免费版,但是内核在 .NETCore 运行有问题经常 Timeout,暂无法解决;

  3. CSRedis于2016年开始支持.NETCore一直迭代至今,实现了低门槛、高性能,和分区高级玩法的.NETCore redis-cli SDK;后来作者重构了CSRedis,变成更简易的 FreeRedis,目前推荐大家使用 FreeRedis,支持几乎所有 .NET 平台和 AOT。FreeRedis官网

4.1 安装FreeRedis

直接使用Visual Studio中的Nuget包管理器搜索安装:
ASP.NET Core 高级之使用Redis缓存_第8张图片或者使用dotnet命令行添加FreeRedis

dotnet add package FreeRedis

4.2 在项目中使用FreeRedis

  1. 在appsetting.json中配置redis的连接字符串;

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      //redis连接字符串
      "RedisCon": "127.0.0.1:6379,password=123456,defaultDatabase=1",
    
    }
    
  2. 在Program.cs中注册FreeRedis的单例服务;

 //引用
using FreeRedis;
//...

//获取连接字符串
string redisConnectionString = builder.Configuration.GetSection("RedisCon").Value;
//注册RedisClient服务
builder.Services.AddSingleton(r =>
{
    var cli = new RedisClient(redisConnectionString);
    //cli.Serialize = obj => JsonConvert.SerializeObject(obj);  //序列化
    //cli.Deserialize = (json, type) => JsonConvert.DeserializeObject(json, type); //反序列化
    cli.Notice += (s, e) => Console.WriteLine(e.Log); //打印命令日志

    return cli;
});
  1. 在业务代码中使用FreeRedis;
using FreeRedis;

[Route("api/[controller]/[action]")]
[ApiController]
public class RedisDemoController : ControllerBase
{
    private readonly RedisClient _redisClient;
    //构造方法 依赖注入 RedisClient
    public RedisDemoController(RedisClient redisClient)
    {
        this._redisClient = redisClient;
    }

    [HttpPost]
    public IActionResult TestRedisString()
    {
        Book book = new Book() { Id = 10, ISBN = "1341324123", CategoryId = 1, Title = "论语" };

        // 使用字符串类型 -缓存一本书 1小时后过期
        _redisClient.Set("hello", book, 3600);
        // 根据键获取对应的值
        var result = _redisClient.Get("hello");

        return Ok(result);
    }

    [HttpPost]
    public IActionResult TestRedisHash()
    {
        Book book1 = new Book() { Id = 11, ISBN = "134176324123", CategoryId = 1, Title = "孟子" };
        Book book2 = new Book() { Id = 12, ISBN = "134132415623", CategoryId = 1, Title = "老子" };

        //使用哈希类型-缓存两本书 1小时后过期
        _redisClient.HSet("books", book1.ISBN, book1);
        _redisClient.HSet("books", book2.ISBN, book2);
        _redisClient.Expire("books", 3600);

        var result = _redisClient.HGet("books", book2.ISBN);

        return Ok(result);
    }
}

4.3 测试效果图

TestRedisString接口的测试结果如下:
ASP.NET Core 高级之使用Redis缓存_第9张图片
TestRedisHash接口的测试结果如下:
ASP.NET Core 高级之使用Redis缓存_第10张图片
FreeRedis的所有方法名与 redis-cli 保持一致,所以使用起来非常方便。大家可以参照考Redis中文网进行进一步学习和尝试。


本次对ASP.NET Core中使用Redis进行了一个入门级的安装及案例演示。如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。

你可能感兴趣的:(#,ASP.NET,Core,.NET后端,缓存,asp.net,redis,.net,core)