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

4次阅读

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

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

用 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 后缀)调用:

  • 字符串(StringDb.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 已足够健壮和易用。

text=ZqhQzanResources