c# 如何操作 redis
发布时间 - 2025-12-27 00:00:00 点击率:次首选 StackExchange.Redis 客户端,需全局复用单例 ConnectionMultiplexer 实例连接 Redis;StringSet/StringGet 仅操作 RedisValue,存对象须手动序列化;Hash/List/Set 应按语义使用对应 API;常见异常多因连接管理不当。
用 C# 操作 Redis,首选 StackExchange.Redis —— 它是目前 .NET 生态中事实标准、免费、线程安全、支持连接池和集群的成熟客户端。
怎么连上 Redis?ConnectionMultiplexer 是关键
ConnectionMultiplexer 不是“每次操作都新建连接”,而是长生命周期的单例连接管理器。它自动复用 TCP 连接、重连失败节点、处理多数据库切换。错误做法是每次 new ConnectionMultiplexer.Connect(...),这会导致连接泄漏和性能暴跌。
- 必须全局复用一个
ConnectionMultiplexer实例(推荐static readonly或 DI 注册为 Singleton) - 连接字符串支持多种格式:
"localhost:6379"、"192.168.3.42:6500,password=123456,defaultDatabase=2"、"server1:6379,server2:6379,allowAdmin=true" - 首次调用
.Connect()会阻塞直到连接就绪;建议加超时或用.ConnectAsync()避免启动卡死
using StackExchange.Redis;public static class RedisHelper { private static readonly ConnectionMultiplexer _multiplexer = ConnectionMultiplexer.Connect("localhost:6379"); public static IDatabase Db => _multiplexer.GetDatabase(); }
StringSet/StringGet 为什么有时返回空?注意类型和序列化
IDatabase.StringSet() 和 IDatabase.StringGet() 只操作原始 RedisValue,不是自动 JSON 序列化的“万能存取”。传入 string 没问题,但传 DateTime、int 或对象会隐式转成字符串(如 DateTime.Now.ToString()),读出来仍是字符串,不会自动反序列化。
- 若需存对象,必须手动序列化:
db.StringSet("user:1", JsonConvert.SerializeObject(user)) - 读取后要手动反序列化:
JsonConvert.DeserializeObject(db.StringGet("user:1")) - 不要依赖
StringGet—— 这个泛型方法只对基础类型(() int、bool、DateTime)做简单解析,且失败时静默返回默认值,极易埋坑 - 过期时间用
TimeSpan:例如db.StringSet("token", "abc", TimeSpan.FromMinutes(30))
Hash、List、Set 等结构怎么用?别直接拼 key 名
Redis 的数据结构操作不是“模拟 SQL”,而是按语义使用对应 API。比如用户信息用 Hash 存,就该用 HashSet/HashGetAll,而不是把整个对象塞进 StringSet。
- 哈希表(Hash)适合实体字段拆存:
db.HashSet("user:1001", new HashEntry[] { new("name", "Alice"), new("age", "28") }) - 列表(List)用于队列/栈:
db.ListLeftPush("queue:mail", "mail-123")+db.ListRightPop("queue:mail") - 集合(Set)去重:
db.SetAdd("tags:post:42", "c#", "redis", "c#")→ 实际只存两个元素 - 所有 key 命名建议带业务前缀(如
cache:user:、lock:order:),避免冲突,也方便后期KEYS cache:user:*扫描清理
常见报错和坑:NullReferenceException / “No connection is available”
绝大多数运行时报错都源于连接管理失当,而非语法错误。
-
NullReferenceException在调用db.StringSet时发生?→ 极大概率是_multiplexer初始化失败(密码错、端口不通、防火墙拦截),但你没捕获Connect异常,导致返回null -
No connection is available to service this operation→ 连接已断开且未自动重连(常见于网络抖动或 Redis 重启后),应监听_multiplexer.ConnectionFailed事件并记录日志 - 本地开发用
redis-server.exe启动时,默认不启用密码、绑定127.0.0.1、端口6379;生产环境务必配requirepass和bind,否则StackExchange.Redis会因认证失败静默断连
真正难的不
是写对一行 StringSet,而是让连接稳如磐石、序列化不丢精度、key 设计能支撑未来删查改——这些细节在压测或上线后才暴露,但补救成本远高于初期想清楚。
# word
# redis
# js
# json
# 防火墙
# 端口
# 栈
# ai
# c#
# .net
# 为什么
# red
# sql
# Static
# String
# mail
# Token
# 字符串
# bool
# int
# 数据结构
# 泛型
# 线程
# 对象
# 事件
# this
# 数据库
# 序列化
# 复用
# 客户端
# 首次
# 它是
# 仍是
# 你没
# 管理器
# 报错
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
想要更高端的建设网站,这些原则一定要坚持!
Android实现代码画虚线边框背景效果
如何在阿里云香港服务器快速搭建网站?
网站制作免费,什么网站能看正片电影?
Laravel如何实现文件上传和存储?(本地与S3配置)
如何挑选高效建站主机与优质域名?
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
制作电商网页,电商供应链怎么做?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
如何用VPS主机快速搭建个人网站?
Laravel storage目录权限问题_Laravel文件写入权限设置
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
什么是javascript作用域_全局和局部作用域有什么区别?
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Swift中循环语句中的转移语句 break 和 continue
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
详解Android中Activity的四大启动模式实验简述
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel如何处理表单验证?(Requests代码示例)
如何快速生成凡客建站的专业级图册?
Laravel怎么上传文件_Laravel图片上传及存储配置
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Python面向对象测试方法_mock解析【教程】
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
LinuxShell函数封装方法_脚本复用设计思路【教程】
如何快速查询域名建站关键信息?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Laravel如何使用Telescope进行调试?(安装和使用教程)
如何快速重置建站主机并恢复默认配置?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Bootstrap CSS布局之列表
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Linux系统运维自动化项目教程_Ansible批量管理实战
javascript基于原型链的继承及call和apply函数用法分析

