C#怎么实现缓存功能 C#如何用MemoryCache和Redis实现数据缓存提升访问速度【架构】

MemoryCache需配置SizeLimit和过期策略,避免内存泄漏;Redis序列化须显式配置JsonSerializerOptions防异常;混合使用时须保证失效同步,防御穿透雪崩需空值缓存+随机key+本地加载锁。MemoryCache 用法和常见误用直接 new MemoryCache(new MemoryCacheOptions()) 就能用,但多数人没配过期策略或大小限制,导致内存悄悄涨满。MemoryCache 是进程内缓存,重启就丢,适合临时、轻量、单机场景必须设置 SizeLimit 和 Size(比如用 SetSize(1)),否则 Remove 不会触发自动淘汰过期时间分两种:AbsoluteExpirationRelativeToNow(绝对时间)和 SlidingExpiration(访问后重置),别混用;SlidingExpiration 在高频读场景下可能让数据永远不淘汰缓存值如果是引用类型,别直接返回 cache.Get<T>("key") 后修改内部字段------Get 返回的是原对象引用,改了会影响后续所有读取Redis 缓存写入时序列化踩坑点用 StackExchange.Redis + System.Text.Json 默认序列化,很容易遇到 null 引用或类型不匹配错误。默认 JsonSerializerOptions 不处理循环引用,实体类有导航属性时直接 Serialize 会抛 System.Text.Json.JsonException缓存 DateTime 时注意时区:.NET 6+ 默认序列化为 ISO 8601 带偏移,但老客户端可能只认 "yyyy-MM-ddTHH:mm:ss" 格式,反序列化失败别把 IDictionary<string, object> 这种弱类型直接塞进 Redis------object 会被序列化成 null 或空对象,读出来是 null 而不是预期字典推荐显式指定 JsonSerializerOptions:new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }MemoryCache 和 Redis 混合使用的典型模式本地缓存 + 分布式缓存组合不是简单"先查本地再查 Redis",关键在失效同步和并发写控制。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能

相关推荐
玩大数据的龙威18 小时前
农经权二轮延包—固定比例尺不定图幅的公示图批量生成
python·arcgis·二轮延包公示图
2601_9521963619 小时前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
皮皮学姐分享-ppx19 小时前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
晚安日记wanna19 小时前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
虎虎(_ _)。゜zzZ19 小时前
关于字典中的解包问题
python
全栈弄潮儿²⁰²⁴19 小时前
Python实战第2期: 变量与数据类型
python·变量·数据类型·python实战
java1234_小锋20 小时前
Redis 宣布正式接入 AI
数据库·人工智能·redis
这个DBA有点耶20 小时前
数据融合平台的下一代形态:数据库内核自己就能融合,为什么还要ETL?
数据库·架构·aigc
数据库小学妹20 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
程序员yu20 小时前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法