最主流、高性能且推荐的 C# 操作 Redis 方式是 StackExchange.Redis 客户端库,它支持异步 / 同步、连接池、自动重连等特性,需全局复用 ConnectionMultiplexer 实例并合理处理异常与重试。

用 C# 操作 Redis,最主流、高性能且推荐的方式就是使用 StackExchange.Redis 官方客户端库。它支持同步 / 异步、连接池、自动重连、分片、发布订阅等特性,是 .NET 生态中 Redis 的事实标准。
安装 StackExchange.Redis 包
在项目中通过 NuGet 安装:
- Visual Studio: 工具 → NuGet 包管理器 → 管理解决方案的 NuGet 包 → 搜索 StackExchange.Redis → 安装
- 命令行(.NET CLI):
dotnet add package StackExchange.Redis
安装后引用命名空间:using StackExchange.Redis;
建立连接与获取数据库实例
StackExchange.Redis 使用懒连接 + 连接池模式,建议全局复用一个 ConnectionMultiplexer 实例(线程安全),再从中获取 IDatabase 来执行命令。
- 不要每次操作都新建连接,否则性能差、易耗尽 socket
- 连接字符串示例:
"localhost:6379,abortConnect=false,connectTimeout=5000,syncTimeout=5000" -
abortConnect=false表示启动失败不抛异常,便于后续重连 - 推荐封装为静态单例或注入到 DI 容器中
简单初始化示例:
private static readonly Lazy<ConnectionMultiplexer> LazyConnection = new(() => { var config = ConfigurationOptions.Parse("localhost:6379"); config.AbortOnConnectFail = false; return ConnectionMultiplexer.Connect(config); }); <p>public static ConnectionMultiplexer Connection => LazyConnection.Value;</p> <div class="aritcle_card"> <a class="aritcle_card_img" href="/xiazai/code/10503"> <img src="https://img.php.cn/upload/webcode/000/000/004/176243220273825.jpg" alt="NetShop 网店系统 "> </a> <div class="aritcle_card_info"> <a href="/xiazai/code/10503">NetShop 网店系统 </a> <p>NetShop 软件特点介绍:1、使用 ASP.Net(c#)2.0、多层结构开发 2、前台设计不采用任何。NET 内置控件读取数据,完全标签化模板处理,加快读取速度 3、安全的数据添加删除读取操作,利用存储过程模式彻底防制 SQL 注入式攻击 4、前台架构 DIV+CSS 兼容 IE6,IE7,FF 等,有利于搜索引挚收录 5、后台内置强大的功能,整合多家网店系统的功能,加以优化。6、支持三种类型的数据库:Acces</p> <div class=""> <img src="/static/images/card_xiazai.png" alt="NetShop 网店系统 "> <span>0</span> </div> </div> <a href="/xiazai/code/10503" class="aritcle_card_btn"> <span> 查看详情 </span> <img src="/static/images/cardxiayige-3.png" alt="NetShop 网店系统 "> </a> </div> <p>// 获取数据库(默认 db0)public static IDatabase Db => Connection.GetDatabase();
常用数据类型操作(字符串、哈希、列表、集合)
IDatabase 提供了丰富的方法,支持同步和异步(带 Async 后缀)调用:
- 字符串(String):
Db.StringSet("key", "value")、Db.StringGet("key") - 哈希(Hash):
Db.HashSet("user:1001", new HashEntry[] {new("name", "Tom"), new("age", "25") }),Db.HashGetAll("user:1001") - 列表(List):
Db.ListLeftPush("mylist", "item1")、Db.ListRange("mylist", 0, -1) - 集合(Set):
Db.SetAdd("tags", "csharp", "redis")、Db.SetMembers("tags") - 所有操作都可加过期时间,例如:
Db.StringSet("key", "val", TimeSpan.FromMinutes(10))
处理连接断开与异常重试
Redis 连接可能因网络波动、服务重启而中断。StackExchange.Redis 会自动尝试重连,但需注意:
- 检查
ConnectionMultiplexer.IsConnected或监听ConnectionFailed/ConnectionRestored事件 - 避免在连接断开时直接调用 DB 方法(会抛
RedisConnectionException) - 业务层建议配合 Polly 等库做重试策略(如对关键写入操作)
- 异步方法返回
Task,记得 await;同步方法在高并发下可能阻塞线程,生产环境优先用异步
示例:安全读取字符串值
try {var value = await Db.StringGetAsync("mykey"); if (value.HasValue) Console.WriteLine(value); } catch (RedisConnectionException ex) {// 记录日志,必要时触发告警 Console.WriteLine($"Redis 连接异常: {ex.Message}"); }
基本上就这些。掌握连接管理、数据操作和异常应对,就能稳定高效地在 C# 中使用 Redis。不需要额外封装底层协议,StackExchange.Redis 已足够健壮和易用。






























