阅读本文你的收获
- 了解Redis基本作用及其使用场景
- 学会安装Redis服务端和客户端及简单的命令行操作
- 学习在ASP.NET Core WebAPI项目中如何操作Redis缓存
一、Redis介绍
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
- Redis支持丰富的数据类型,常用的如下:
- string(字符串) // 是 redis 最基本的类型, string 可以包含任何数据,一个键最大能存储 512MB
- hash(哈希) // hash 特别适合用于存储对象
- list(列表) // 列表是简单的字符串列表,按照插入顺序排序。可以用作队列。
- set(集合) //集合内元素的唯一性
- zset (sorted set:有序集合)
-
Redis的性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
-
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
-
Redis支持数据的高并发、高可用,如主从模式、哨兵模式、cluster集群模式
使用场景
- 字符串(String): 最基本的数据类型,可以存储字符串、整数或浮点数。场景:缓存Session会话,计数器,流水号等。
- 哈希/散列/字典(Hash):键值对的集合,可以在一个哈希数据结构中存储多个字段和值。场景:存电商的购物车信息
- 列表(List):按照插入顺序存储一组有序的值,可以在列表的两端执行插入、删除和访问操作。场景:用作简单的消息队列。
- 集合(Set):无序的唯一值集合。场景:实现抽奖,文章的点赞、评论。
- 有序集合(Sorted Set):可以根据分数对成员进行排序,同时保持唯一性。场景:实现体育赛事排行榜,游戏积分榜,热销商品排行榜。
二、安装Redis服务端
-
将 安装包 Redis-x64-3.2.100.zip ,解压到C盘或D盘根目录下,就完成了安装。安装包下载
-
将以上安装目录添加到环境变量Path中,如下图:
-
设置Redis服务器的密码,打开安装目录下的redis.windows.conf配置文件,找到“requirepass”,设置为自己的密码。
-
启动Redis服务器。打开一个 命令行控制台窗口(小黑窗),cd命令切换到安装目录 ,输入以下命令启动
redis-server.exe redis.windows.conf
如下图:
- 把Redis服务加入到Windows 服务中,让它开机自启动
在Redis的安装目录,打开cmd,然后输入以下命令:
安装服务的命令:
redis-server.exe --service-install redis.windows.conf --loglevel verbose
卸载服务的命令:
redis-server --service-uninstall
以上步骤结束之后,在任务管理器的“服务”中,启动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)桌面客户端进行访问;
点击“确定”后连接上Redis服务器,并显示db0~db15共16个数据库
四、ASP.NET Core中使用Redis
开发环境:
操作系统: Windows 10 专业版
平台版本是:.NET 6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022
ASP.NET Core中推荐使用FreeRedis客户端库来连接Redis服务器。
以下这些都是操作Redis的.NET客户端组件,为什么使用FreeRedis这个组件呢?
ServiceStack.Redis 是商业版,免费版有限制;
StackExchange.Redis 是免费版,但是内核在 .NETCore 运行有问题经常 Timeout,暂无法解决;
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
-
在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", }
-
在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;
});
- 在业务代码中使用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进行了一个入门级的安装及案例演示。如果本文对你有帮助的话,请点赞+评论+关注,或者转发给需要的朋友。