C#如何操作Redis数据库 C# StackExchange.Redis使用教程

来源:这里教程网 时间:2026-02-21 17:33:17 作者:

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

相关推荐