最主流、高性能且推荐的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 已足够健壮和易用。