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中,如下图:
    华景变量

  3. 设置Redis服务器的密码,打开安装目录下的redis.windows.conf配置文件,找到“requirepass”,设置为自己的密码。
    修改密码

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

redis-server.exe redis.windows.conf

如下图:
redis服务启动

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

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

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

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

以上步骤结束之后,在任务管理器的“服务”中,启动Redis服务
查看redis服务

三、Redis 客户端

3.1 redis-cli命令行

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

redis-cli -p 6379 -a 123456     

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

命令行

3.2 Redis GUI客户端

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

<GUI客户端

点击“确定”后连接上Redis服务器,并显示db0~db15共16个数据库
rdm查看redis数据库

四、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包管理器搜索安装:
在这里插入图片描述或者使用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接口的测试结果如下:
字符串类型
TestRedisHash接口的测试结果如下:
哈希类型
FreeRedis的所有方法名与 redis-cli 保持一致,所以使用起来非常方便。大家可以参照考Redis中文网进行进一步学习和尝试。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/342143.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全国各城市绿地及绿化面积数据,shp/excel格式,2020-2022年

基本信息. 数据名称: 全国各城市绿地及绿化面积数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1province省份名称2city城市名称4city_dm城市…

通过浏览器URL地址,5分钟内渗透你的网站!很刑很可拷!

今天我来带大家简单渗透一个小破站&#xff0c;通过这个案例&#xff0c;让你深入了解为什么很多公司都需要紧急修复各个中间件的漏洞以及进行URL解析拦截等重要操作。这些措施的目的是为了保护网站和系统的安全性。如果不及时升级和修复漏洞&#xff0c;你就等着被黑客攻击吧&…

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等

使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 此自动化脚本将帮助你使用 Python 中的 Android 调试桥 (ADB) 自动化你的智能手机。下面我将展示如何自动执行常见任务,例如滑动手势、呼叫、发送短信等等。 您可以了解有关 ADB 的更多信息,…

测量USB接口信号眼图质量

此处只描述High&#xff0d;Speed模式信号质量的测试方法&#xff0c;Full&#xff0d;Speed测试方法可参考High&#xff0d;Speed测试方法。测试前连接好电路&#xff0c;对于USB 2.0 Host设备&#xff0c;差分探头TDP3500尽量靠近芯片信号输出地方&#xff0c;并注意极性不要…

[Tomcat] [最全] 目录和文件详解

打开tomcat的解压之后的目录可以看到如下的目录结构&#xff1a; Bin bin目录主要是用来存放tomcat的命令&#xff0c;主要有两大类&#xff0c;一类是以.sh结尾的&#xff08;linux命令&#xff09;&#xff0c;另一类是以.bat结尾的&#xff08;windows命令&#xff09;。 …

RFID智能产线设计管理方案

在传统的制造企业中&#xff0c;日常管理主要集中在产品管理、质量管理、仓库管理、移动资产管理、现场人员管理、车队管理等方面&#xff0c;而传统的人工采集和手工输入方式存在准确性不足和错误率高的问题&#xff0c;手工输入只能定时进行&#xff0c;导致生产计划只能按周…

工业智能网关储能物联网应用实现能源的高效利用及远程管理

储能电力物联网是指利用物联网技术和储能技术相结合&#xff0c;实现对电力系统中各种储能设备的智能管理和优化控制。随着可再生能源的不断发展和应用&#xff0c;电力系统面临着越来越大的电力调度和储能需求而储能电力物联网的出现可以有效解决这一问题&#xff0c;提高电力…

保姆级CISP报考攻略,让你不再迷茫

信息安全领域越来越火&#xff0c;想要在这个行业闯出一片天&#xff1f;CISP认证就是你的“敲门砖”&#xff01;想知道如何顺利考取这个超牛的证书吗&#xff1f;下面就带你一起探索保姆级CISP报考流程&#xff01;&#x1f389; &#x1f393;报考条件&#x1f393; 学历专业…

年末怒赚一笔,程序员快码住!趁热接单

元旦已过&#xff0c;龙年将至。 有钱没钱&#xff0c;回家过年。 话说回来&#xff0c;年关将至&#xff0c;农历的2023即将落下帷幕。天气渐寒&#xff0c;你的钱包是否也让你心生寒意&#xff1f;年初立下的赚钱flag是否优雅地实现了? 如果flag都倒了&#xff0c;你先别…

csdn发布文章审核一直未通过解决办法

搞了很久的confluence&#xff0c;踩了很多坑终于弄好了&#xff0c;却一直显示审核不通过&#xff0c;给笔记一顿狂改还是不通过&#xff0c;一直说是版权问题就很让人起疑&#xff0c;最后问了客服才知道&#xff0c;现在开始查版权问题&#xff0c;所以我给confluence笔记中…

Git仓库里嵌着别的仓库导致出现问题

例如这样&#xff0c;git仓库里面有箭头&#xff0c;且仓库打开是一个空仓库。 解决问题的方法 1.到子仓库路径下&#xff0c;使用ls -a指令可以看到文件夹下有一个.git文件夹。 我们使用rm -rf <子仓库路径>/.git删除每个子仓库下面的.git文件夹。 2.执行git rm --cache…

把握好这5个阶段,快速成交优质外贸客户

要想快速成交一个有潜力的优质客户往往需要经历五个阶段。这五个阶段分别是&#xff1a;“获联”、“筛选”、“入野”、“破局”、“快速成交”。 01 获联 我们的第一步工作&#xff0c;就是需要主动或者被动去吸引客户&#xff0c;把客户引进来。将客户引进来的方式有…

基本语法和 package 与 jar

3.基本语法 1.输入输出 // 导入 java.util 包中的 Scanner 类 import java.util.Scanner;// 定义名为 ScannerExample 的公共类 public class ScannerExample {// 主方法&#xff0c;程序的入口点public static void main(String[] args) {// 创建 Scanner 对象&#xff0c;用…

对 MODNet 其他模块的剪枝探索

写在前面 先前笔者分享了《对 MODNet 主干网络 MobileNetV2的剪枝探索》&#xff0c;没想到被选为了CSDN每天值得看系列&#xff0c;因为笔者开设的专栏《MODNet-Compression探索之旅》仅仅只是记录笔者在模型压缩领域的探索历程&#xff0c;对此笔者深感荣幸&#xff0c;非常…

vue3 npm i 一直卡到不动

一. 首先node 版本要18.0及以上 查看node版本并安装指定版本 二. 查看npm镜像源以及指定安装npm的镜像 三. 删除项目中的package-lock.json文件 最好是把node_modules安装包也删除掉&#xff0c;然后npm i 就可以了

如何用 500 行 SQL 实现 GPT2学习

目录 理论背景实现过程GenerationTokenizerEmbeddingsAttention为什么我们需要有因果掩码&#xff1f;为什么矩阵是 Q&#xff0c;K 和 V&#xff1f; BlocksTokens为什么要使用 softmax 转换概率&#xff1f;Inference 俄罗斯有个大佬每年都会用 SQL 来实现一个挑战庆祝新年&a…

1.23寒假集训

A: 解题思路&#xff1a; 大于x输出0&#xff0c;小于输出x减去这个数 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {int a,b,c,d,x;cin >> a >> b >> c >> d >> x;cout << (a < x ? x - a…

Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?

人工智能席卷全球&#xff0c;企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮&#xff0c;Salesforce宣布与埃森哲和德勤建立合作伙伴关系&#xff0c;并计划推出更多支持项目。 目前&#xff0c;Salesforce领域的其他咨询公司正在提高员工技能&#xff0c;以…

Unity 适配器模式(实例详解)

文章目录 简介1. **Input Adapter 示例**2. **Component Adapter 示例**3. **网络数据解析适配器**4. **物理引擎适配**5. **跨平台服务适配** 简介 Unity中的适配器模式&#xff08;Adapter Pattern&#xff09;主要用于将一个类的接口转换为另一个接口&#xff0c;以便于原本…