新闻中心

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

2025-12-14
浏览次数:
返回列表
最主流、高性能且推荐的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 后缀)调用:

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

以上就是C#如何操作Redis数据库 C# StackExchange.Redis使用教程的详细内容,更多请关注其它相关文章!


# 复用  # 营销策划seo 运营  # 兰州网站建设布局哪家好  # seo总部  # 柳城热门网站建设推广  # 武穴推广网站  # 成华区网站建设报价公示  # 网站建设 发票 体现  # seo网站关键词优化 哈士奇seo  # 东莞奶粉产品营销推广  # 抚顺网站建设案例步骤  # 不需要  # 就能  # redis  # 如何实现  # 如何使用  # 高性能  # 连接池  # 重试  # 客户端  # 网店  # red  # .net  # c#  # ai  # 工具 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 菜鸟取件码是什么怎么查 最全查询渠道汇总  海棠电脑版入口_通过电脑访问海棠官网阅读  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  将HTML Canvas内容转换为可上传的图像文件(File对象)  React/Next.js中实现列表项的动态选择与移动  J*aScript map 方法中处理循环元素为空数组的策略  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  照顾宝贝2小游戏免费秒玩入口  微信语音通话掉线如何解决 微信语音通话稳定优化方法  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  必由学登录入口 必由学官方网站在线访问链接  小米14应用无法联网原因分析_小米14网络权限修复  QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台  J*a里如何实现线程安全的懒加载单例_懒加载单例实现方法解析  今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  深入理解Promise链:如何在catch后中断then的执行  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  Python:递归比较文件夹内容并找出特定类型文件的差异  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  Angular Material 垂直步进器:实现底部到顶部排序的教程  钉钉视频会议画面卡顿如何解决 钉钉会议画面优化方法  晋江读书网页版在线登录 晋江读书电脑版官网  4399免费游戏网址入口 4399小游戏免费入口点开即玩  163邮箱注册官网 免费申请163个人邮箱  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  抓大鹅无需下载版 抓大鹅秒玩版入口  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  在React函数组件中利用原生HTML5进行邮箱地址验证  J*a 递归快速排序中静态变量的状态管理与陷阱  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换 

搜索