ASP .NET Core 8高效集成Redis缓存实战

Redis 最常用的功能是作为高性能的 分布式缓存 ,替代默认的内存缓存(IMemoryCache),适用于多服务器部署的场景。

1、安装Redis Nuget包

复制代码
dotnet add package Microsoft.Extensions.Caching.StackExchangeRedis

2、在appsettings.json中添加redis配置项

复制代码
{
    "RedisConfig": {
      "Connection": "localhost:6379",
      "Password": "",
      "InstanceName": "BackendManagement:",
      "DefaultDatabase": 0
    }
}

3、创建redis配置项对象

复制代码
/// <summary>
/// redis配置信息
/// </summary>
public class RedisConfig
{
    /// <summary>
    /// 连接字符串
    /// </summary>
    public string Connection { get; set; } = string.Empty;
    
    /// <summary>
    /// 密码
    /// </summary>
    public string Password {  get; set; } = string.Empty;

    /// <summary>
    /// 实例名
    /// </summary>
    public string InstanceName { get; set; } = string.Empty;

    /// <summary>
    /// 默认数据库索引
    /// </summary>
    public int DefaultDatabase { get; set; }
}

4、在 Program.cs 中配置 Redis 服务

cs 复制代码
var builder = WebApplication.CreateBuilder(args);

 RedisConfig? redisConfig = builder.Configuration.GetSection("RedisConfig").Get<RedisConfig>();
 if (redisConfig != null)
 {
     builder.Services.AddSingleton(redisConfig);
     builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
     {
         var configuration = ConfigurationOptions.Parse(redisConfig.Connection);
         configuration.AbortOnConnectFail = false; // 不要立即失败
         configuration.ConnectTimeout = 5000;      // 5秒连接超时
         configuration.SyncTimeout = 5000;         // 5秒操作超时
         configuration.ReconnectRetryPolicy = new ExponentialRetry(1000); // 重试策略

         if (!string.IsNullOrEmpty(redisConfig.Password))
         {
             configuration.Password = redisConfig.Password;
         }

         var multiplexer = ConnectionMultiplexer.Connect(configuration);

         // 注册应用程序关闭时的清理
         var lifetime = sp.GetRequiredService<IHostApplicationLifetime>();
         lifetime.ApplicationStopping.Register(() =>
         {
             multiplexer.Close();
             multiplexer.Dispose();
         });

         return multiplexer;
     });
     builder.Services.AddSingleton<IDatabase>(sp =>
     {
         var multiplexer = sp.GetRequiredService<IConnectionMultiplexer>();
         return multiplexer.GetDatabase(redisConfig.DefaultDatabase);
     });
 }
 else
 {
     Log.Error("RedisConfig is empty.");
 }

var app = builder.Build();

5、使用redis数据库

cs 复制代码
public class RedisService
{
    private readonly IDatabase _redisDB;

    public RedisService(IDatabase redisDB)
    {
        _redisDB = redisDB;
    }

    public async Task PerformOperations()
    {
        await _redisDB.StringSetAsync("mykey", "myvalue");
        var value = await _redisDB.StringGetAsync("mykey");
    }
}
相关推荐
麦兜*1 天前
Spring Boot 项目 Docker 化:从零到一的完整实战指南
数据库·spring boot·redis·后端·spring·缓存·docker
朝九晚五ฺ1 天前
【Redis学习】Redis中常见的全局命令、数据结构和内部编码
数据库·redis·学习
云虎软件朱总1 天前
同城配送系统:基于 Spring Boot+Redis+RabbitMQ 构建
spring boot·redis·java-rabbitmq
Flash Dog2 天前
【Redis原理】缓存的内部逻辑
数据库·redis·缓存
whltaoin2 天前
SpringCloud项目阶段八:利用redis分布式锁解决集群状态下任务抢占以及实现延迟队列异步审核文章
redis·分布式·spring cloud
修炼果2 天前
为什么使用 Redis 存储Oauth的state 参数,可有效防止 CSRF 攻击
数据库·redis·csrf
whltaoin2 天前
SpringCloud项目阶段七:延迟任务技术选项对比以及接入redis实现延迟队列添加/取消/消费等任务
redis·spring cloud·延迟任务
東雪蓮☆2 天前
Redis 三种服务架构详解:主从复制、哨兵模式与集群
linux·运维·数据库·redis
了不起的杰2 天前
【Redis】:从应用了解Redis
数据库·redis·缓存
论迹2 天前
【Redis】-- 分布式锁
数据库·redis·分布式