C#怎么实现Redis分布式缓存 C#如何在ASP.NET Core中集成Redis实现分布式缓存方案【架构】

ASP.NET Core 6+ 应使用 Microsoft.Extensions.Caching.StackExchangeRedis 封装的 IDistributedCache,而非直连 StackExchange.Redis;需显式序列化、设过期时间、防穿透/击穿/雪崩,并用 redis-stack-server 本地开发。ASP.NET Core 6+ 默认用 IDistributedCache 接 Redis,别自己封装 StackExchange.Redis 客户端直接暴露 ConnectionMultiplexer 容易导致连接泄漏、序列化不一致、超时配置错乱。微软的 Microsoft.Extensions.Caching.StackExchangeRedis 包已封装好线程安全、连接复用和异常重试逻辑,且与 ILogger、IOptions 深度集成。常见错误现象:Timeout performing GET 频发、缓存键大小写不一致导致命中失败、JSON序列化后类型丢失。注册时必须用 AddStackExchangeRedisCache,而非手动 AddSingleton<IConnectionMultiplexer>连接字符串里不要硬编码 connectTimeout=5000 ------ 它会被 ConfigurationOptions.ConnectTimeout 覆盖,而后者默认是 5s,生产环境建议设为 10--15s避免在 Startup.ConfigureServices 中调用 GetDatabase() 获取实例 ------ 这会提前触发连接,且破坏 DI 生命周期管理IDistributedCache.SetAsync 存的是字节数组,不是对象,别漏了序列化它底层不做任何序列化,传入 new byte\[\] { 1, 2, 3 } 就存什么,取出来也一样。如果你直接传 JsonSerializer.SerializeToUtf8Bytes(obj),那读取时就得对应 JsonSerializer.Deserialize<T>(bytes),否则就是 NullReferenceException 或 JSON 解析失败。使用场景:存 DTO、配置片段、计算结果等短生命周期数据;不适合存大文件或未压缩的二进制流(Redis 单 key 建议 ≤ 1MB)。推荐统一用 System.Text.Json,避免 Newtonsoft.Json 引入额外依赖和兼容性问题设置过期时间必须显式传 new DistributedCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(10)),不传就永不过期注意 SetAsync 不会自动处理 null 值 ------ 传 null 会存空字节数组,读出来也是非 null 的空数组,业务层要主动判空Redis 缓存穿透、击穿、雪崩,在 C# 层能做的只有"缓存空值 + 逻辑过期"Redis 本身不解决这三类问题,得靠代码逻辑兜底。比如查数据库返回 null,你不能跳过缓存直接返回,而应把 "" 或特殊标记(如 {"exists":false})连同短 TTL(如 2 分钟)一起写入缓存。 Mokker AI AI产品图添加背景

相关推荐
我命由我123451 分钟前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
青少儿编程课堂6 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
SelectDB23 分钟前
Apache Doris 与 SelectDB 是什么关系?从开源技术到面向 Agent 的极速分析数据库
大数据·数据库·数据分析
atwednesday27 分钟前
一文理解python中的task,协程,woker
python
VimorphTech40 分钟前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis
SelectDB41 分钟前
存算分离冷查询提速 7.5 倍!Apache Doris 4.2 Peer Read 实现跨计算组缓存复用
大数据·数据库·数据分析
盛世宏博智慧档案1 小时前
一站式智慧档案解决方案,如何实现防火防盗漏水多维度安全监测实践
服务器·网络·数据库
数据库小学妹1 小时前
MySQL磁盘IO瓶颈:iostat与刷脏fsync
数据库·mysql·性能优化
用户0332126663671 小时前
使用 Python 在 Excel 中添加与删除筛选器
python·excel
1M551 小时前
AI应用后端工程(03):回答输出一半就断了:AI 流式接口如何定义成功与失败?
python·面试·职场和发展·计算机专业·agent开发