当前位置: 首页 > news >正文

redis基本用法学习(C#调用NRedisStack操作redis)

  redis官网文档中推荐C#中使用NRedisStack包连接并操作redis,本文学习C#调用NRedisStack操作redis的基本方式。
  新建Winform项目,在Nuget包管理器中搜索并安装NRedisStack包,如下图所示:

在这里插入图片描述
  主要调用StackExchange.Redis命名空间下ConnectionMultiplexer类的Connect函数连接redis,默认情况下只需指定redis所在服务器地址即可,端口默认为6379,同时没有连接密码,调用示例如下所示:

ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
IDatabase db = redis.GetDatabase();

  redis安装目录下的redis.windows-service.conf中可以设置redis服务监听端口和密码,如下图所示,修改内容后,需要在Windows服务中重启redis服务后生效。
在这里插入图片描述在这里插入图片描述
  如果带端口和密码形式连接,需要在Connect函数中传入ConfigurationOptions对象实例,并在实例中设置密码、ip和端口,示例代码如下所示:

ConfigurationOptions options = new ConfigurationOptions();
options.Password = “XXXXXXX”;
options.EndPoints.Add(“XXXXXXX”, XXXX);
redis = ConnectionMultiplexer.Connect(options);
db = redis.GetDatabase();

  连接成功后,可以调用redis.GetStatus函数获取连接状态,如下图所示:
在这里插入图片描述

  redis.GetDatabase函数返回IDatabase接口对象实例,用于与redis服务器交互,该接口中定义了redis中各种数据类型相关的命令操作函数,函数名称都是以数据类型+操作命令的形式定义,下图为字符串类型键值对的操作函数:
在这里插入图片描述
  编写简单的测试程序,连接redis服务器设置或获取键值对,同时打开命令行连接redis进行交互,C#中的代码如下所示:

private void btnSet_Click(object sender, EventArgs e)
{if(string.IsNullOrEmpty(txtSeconds.Text)) {m_db.StringSet(txtKey.Text, txtValue.Text);}else{m_db.StringSet(txtKey.Text, txtValue.Text,new TimeSpan(0,0,Convert.ToInt32(txtSeconds.Text)));}            
}private void btnGet_Click(object sender, EventArgs e)
{if(!m_db.KeyExists(txtKey1.Text)){MessageBox.Show("不存在指定key:" + txtKey1.Text);return;}MessageBox.Show(m_db.StringGet(txtKey1.Text));
}

  如下截图所示,通过控制台查看redis保存的键值对,然后在Winform程序中获取指定的键的值,两边获取到的内容都是相同的:
在这里插入图片描述

  在Winform程序中设置新的键值对,同时设置过期时间,然后在控制台中查看并获取新增键的值及过期时间。等键值对过期后,在Winform中再获取键值时,失效的键值已经获取不到了。
在这里插入图片描述

参考文献:
[1]https://redis.io/docs/connect/clients/dotnet/
[2]https://github.com/redis/NRedisStack

相关文章:

  • idea SpringBoot项目 Run Dashboard 多个启动类分组展示 失效
  • Electron训练笔记
  • 原码,反码,补码讲解,超详解
  • 【Jmeter】循环执行某个接口,接口引用的参数变量存在规律变化
  • 用户管理第2节课-idea 2023.2 后端一删除表,从零开始---【本人】
  • 循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)
  • 使用Pycharm一键将.ui文件生成.py文件配置教程、一键打开QTDesigner教程
  • selenium 报错
  • STM32G4x FLASH 读写(修改HAL库驱动)
  • Mac 生成Android签名证书 .keystore文件
  • 【PostgreSQL】从零开始:(二十一)数据类型-布尔类型
  • UE5 水材质注意要点
  • 前端ICON库
  • Linux shell编程学习笔记37:readarray命令和mapfile命令
  • 版本化数据库管理工具Flyway介绍和Spring Boot集成使用
  • angular2开源库收集
  • Consul Config 使用Git做版本控制的实现
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java教程_软件开发基础
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel5.4 Queues队列学习
  • MySQL几个简单SQL的优化
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer插入数据
  • windows下使用nginx调试简介
  • 阿里云Kubernetes容器服务上体验Knative
  • 阿里云应用高可用服务公测发布
  • 初识 beanstalkd
  • 番外篇1:在Windows环境下安装JDK
  • 蓝海存储开关机注意事项总结
  • 入口文件开始,分析Vue源码实现
  • 数据可视化之 Sankey 桑基图的实现
  • 温故知新之javascript面向对象
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 阿里云API、SDK和CLI应用实践方案
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)(1.13) SiK无线电高级配置(六)
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (三)mysql_MYSQL(三)
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)linux下的时间函数使用
  • .htaccess配置重写url引擎
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net FrameWork简介,数组,枚举
  • .net 设置默认首页
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .net和php怎么连接,php和apache之间如何连接
  • .Net中的集合
  • [ 数据结构 - C++] AVL树原理及实现
  • [].slice.call()将类数组转化为真正的数组