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

幻夢星雲
发布: 2025-12-14 13:42:08
原创
562人浏览过
最主流、高性能且推荐的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使用教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号