C#怎么操作Redis缓存 C#如何用StackExchange.Redis连接和操作Redis数据【数据库】

张开发
2026/4/18 23:52:22 15 分钟阅读

分享文章

C#怎么操作Redis缓存 C#如何用StackExchange.Redis连接和操作Redis数据【数据库】
StackExchange.Redis连接字符串错误会导致线程阻塞5秒而非报错需设connectTimeout/syncTimeout、用ConnectAsync()、全局单例ConnectionMultiplexer、正确判断RedisValue.IsNull、批量操作用MGET、复杂逻辑用Lua、Cluster下禁用SELECT。StackExchange.Redis 连接字符串写错会直接卡死不是报错默认情况下ConnectionMultiplexer.Connect() 遇到无法解析的地址、端口不通或 DNS 失败会阻塞线程长达数秒默认 5 秒而不是立刻抛异常。这在 ASP.NET Core 启动或高并发场景下极易引发雪崩。必须显式设置 connectTimeout 和 syncTimeout例如localhost:6379,connectTimeout2000,syncTimeout1000不要用 Connect()改用异步 ConnectAsync()并在 await 后检查 IsConnected连接对象是线程安全且应长期复用的——全局单例一个 ConnectionMultiplexer 实例别每次操作都 new若 Redis 服务不可达GetDatabase() 仍会成功返回但第一次调用 StringGet() 等命令时才真正触发连接并超时string 类型读写最常用但 Get/Set 默认不处理 null 值IDatabase.StringGet() 返回 RedisValue它不是 string也不是可空引用类型当 key 不存在时返回的是 RedisValue.Null不是 null 或 default(string)。直接强制转 string 会得到空字符串掩盖了“key 不存在”这个关键状态。正确判断是否存在用 if (value.IsNull)而不是 if (value null) 或 string.IsNullOrEmpty(value)存 null 字符串不行。StringSet(k, null) 会静默失败返回 false必须传 RedisValue.Null 才能显式删 key需要序列化对象别自己拼 JSON 后塞 string —— 用 HashGetAll() 或封装好的 JsonSerializer 更稳妥避免 UTF-8 字节 vs 字符串长度歧义批量操作别手写 for 循环用管道Pipeline或 Lua 脚本连续调用 10 次 StringGet() 是 10 次网络往返用 StringGet(key1), StringGet(key2)... 仍是串行。真正省 RTT 的方式只有两个 arXiv Xplorer ArXiv 语义搜索引擎帮您快速轻松的查找保存和下载arXiv文章。

更多文章