用 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><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 已足够健壮和易用。
