后端:推荐 2 个 .NET 操作的 Redis 客户端类库

目录

Redis特点

Redis场景

1. StackExchange.Redis

2. FreeRedis

🚀 快速入门

🎣 Master-Slave (读写分离)

💻 Pipeline (管道)示例

🌌 Redis Cluster (集群)


图片

Redis ,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis是完全开源免费的,遵守BSD协议、

Redis特点

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

  • 丰富的数据类型 – Redis支持的类型 String, Hash,List, , Set 及 Ordered Set 数据类型操作。

  • 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。

  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

  • 高速读写,redis使用自己实现的分离器,代码量很短,没有使用lock(MySQL),因此效率非常高。

Redis场景

1、缓存

缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速度,还能大大降低数据库的压力。Redis提供了键过期功能,也提供了灵活的键淘汰策略,所以,现在Redis用在缓存的场合非常多。

2、排行榜

很多网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。Redis提供的有序集合数据类构能实现各种复杂的排行榜应用。

3、计数器

什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时如果每次都请求数据库操作无疑是种挑战和压力。Redis提供的incr命令来实现计数器功能,内存操作,性能非常好,非常适用于这些计数场景。

4、分布式会话

集群模式下,在应用不多的情况下一般使用容器自带的session复制功能就能满足,当应用增多相对复杂的系统中,一般都会搭建以Redis等内存数据库为中心的session服务,session不再由容器管理,而是由session服务及内存数据库管理。

5、分布式锁

在很多互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可以使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败,实际应用中要考虑的细节要更多。

6、 社交网络

点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量通常来说比较大,而且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。

7、最新列表

Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。

8、消息系统

消息队列是大型网站必用中间件,如ActiveMQ、RabbitMQ、Kafka等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。

今天给大家分享3 款 .NET 流行的 Redis 客户端类库。

1. StackExchange.Redis

StackExchange.Redis是一款.NET平台上的高性能、异步的Redis客户端类库,由StackExchange团队开发。

官网:https://github.com/StackExchange/StackExchange.Redis

图片

StackExchange.Redis通过使用异步方法和IO多路复用等技术,提高了Redis访问的性能和并发性。它还提供了丰富的功能和选项,如连接池、管道、事务、发布/订阅、Lua脚本等,支持多种序列化和压缩方式,可以轻松地与其他.NET应用程序集成。

StackExchange.Redis还支持Redis Sentinel和Redis Cluster等高可用性和集群方案,使得应用程序可以更容易地管理和扩展Redis实例。它是.NET平台上操作Redis数据库的最优秀的客户端类库。

使用示例:

首先,需要在项目中安装 StackExchange.Redis 包,

图片

可以通过 NuGet 管理器来安装,也可以手动下载安装。

然后,在代码中创建 ConnectionMultiplexer 对象,这个对象代表与 Redis 服务器的连接。通常来说,应该只创建一个 ConnectionMultiplexer 对象,然后在需要访问 Redis 数据库时使用它。

using StackExchange.Redis;//初始化ConnectionMultiplexer _conn = RedisConnectionHelp.Instance;var database = _conn.GetDatabase(0);//指定连接的库 0

简单使用方法

//设置StringSet(key, value)database.StringSet("name", "小明");string str = database.StringGet("name");//输出结果:小明//设置时间,30s后过期。database.StringSet("name_two", str, TimeSpan.FromSeconds(30));

除了字符串之外,StackExchange.Redis 还支持许多其他 Redis 数据类型,比如哈希表、列表、集合和有序集合。可以使用相应的 API 来执行相关的操作,比如:

// 操作hash表string json = JsonConvert.SerializeObject(demo);//序列化database.HashSet("user", "cang", json);database.HashSet("user", "shan", json);database.HashSet("user", "yun", json);//获取Modelstring hashcang = database.HashGet("user", "cang");demo = JsonConvert.DeserializeObject<Demo>(hashcang);//反序列化//获取ListRedisValue[] values = database.HashValues("user");//获取所有valueIList<Demo> demolist = new List<Demo>();foreach (var item in values){    Demo hashmodel = JsonConvert.DeserializeObject<Demo>(item);    demolist.Add(hashmodel);}

2. FreeRedis

基于 .NET 的 Redis 客户端,支持 .NET Core 2.1+、.NET Framework 4.0+ 以及 Xamarin。

功能特点

  • 所有方法名与 redis-cli 保持一致

  • 支持 Redis 集群(服务端要求 3.2 及以上版本)

  • 支持 Redis 哨兵模式

  • 支持主从分离(Master-Slave)

  • 支持发布订阅(Pub-Sub)

  • 支持 Redis Lua 脚本

  • 支持管道(Pipeline)

  • 支持事务

  • 支持 GEO 命令(服务端要求 3.2 及以上版本)

  • 支持 STREAM 类型命令(服务端要求 5.0 及以上版本)

  • 支持本地缓存(Client-side-cahing,服务端要求 6.0 及以上版本)

  • 支持 Redis 6 的 RESP3 协议

🚀 快速入门

public static RedisClient cli = new RedisClient("127.0.0.1:6379,password=123,defaultDatabase=12");//打印命令日志cli.Notice += (s, e) => Console.WriteLine(e.Log); cli.Set("name", "小明");cli.MSet("name", "小明", "age", 33);string value1 = cli.Get("name");string[] vals = cli.MGet("name", "age");

🎣 Master-Slave (读写分离)

public static RedisClient cli = new RedisClient("127.0.0.1:6379,password=123,defaultDatabase=11","127.0.0.1:6380,password=123,defaultDatabase=11","127.0.0.1:6381,password=123,defaultDatabase=11");var value = cli.Get("name");

💻 Pipeline (管道)示例

using (var pipe = cli.StartPipe()){pipe.IncrBy("age", 50);pipe.Set("name", );pipe.Get("age");
object[] ret = pipe.EndPipe();Console.WriteLine(ret[0] + ", " + ret[2]);}

🌌 Redis Cluster (集群)

假如你有一个 Redis Cluster 集群,其中有三个主节点(7001-7003)、三个从节点(7004-7006),则连接此集群的代码:

​​​​​​​

public static RedisClient cli = new RedisClient(new ConnectionStringBuilder[] { "192.168.0.2:7001", "192.168.0.2:7002", "192.168.0.2:7003" });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装sql-server数据库,使用navicat实现备份数据库导入

docker安装sql-server&#xff0c;使用navicat实现备份数据库导入 1、docker安装sql-server数据库2、使用navicat连接sql-server3、使用navicat导入备份数据库1、第一步&#xff1a;选择需要备份的数据源2、第二步 &#xff08;选择备份计划&#xff0c;设置还原文件位置信息&a…

WSL2 ubuntu18.04安装ROS

前期准备 在Windows 10上启用WSL&#xff08;Windows Subsystem for Linux&#xff09;的步骤如下&#xff1a; 打开“控制面板”并选择“程序和功能”选项。单击左侧的“启用或关闭Windows功能”链接。滚动到底部并选中“适用于Linux的Windows子系统”复选框。单击“确定”按钮…

写csv相关操作

std::ios::in&#xff1a;输入模式&#xff0c;表示以读取方式打开流。 std::ios::out&#xff1a;输出模式。 std::ios::app&#xff1a;追加模式&#xff0c;表示以写入方式打开流&#xff0c;并将数据追加到文件末尾而不清除原有内容。 std::ios::trunc&#xff1a;截断模式…

『Linux小程序』进度条

文章目录 缓冲区问题回车与换行的区别进度条小程序 缓冲区问题 假设有一段代码为: #include<iostream> #include<unistd.h> int main() …

Apache Spark 的基本概念和在大数据分析中的应用 103.219.31.8

Apache Spark是一款基于内存的通用大数据处理框架&#xff0c;旨在加速数据处理速度。它包含了大规模数据处理&#xff0c;机器学习&#xff0c;图计算等组件。以下是几个 Apache Spark 的基本概念&#xff1a; Resilient Distributed Datasets (RDDs)&#xff1a;RDDs是一个分…

【已解决】Vue全局引入scss 个别页面不生效 / 不自动引入全局样式

项目里配置了全局样式的引入&#xff0c;今天新建了 demo 页面去修改 element 的样式&#xff0c;发现全局的样式没有引入进来。 问题原因 在此页面 没有任何样式导致的 项目在编译的时候&#xff0c;会把 .vue 文件的样式抽离到单独的 css 文件中。 当该页面没有css代码的时…

漏洞复现(CVE-2023-35843)

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

redis与 缓存击穿、缓存穿透、缓存雪崩

什么是缓存击穿、缓存穿透、缓存雪崩 缓存击穿、缓存穿透和缓存雪崩是与缓存相关的三种常见问题&#xff0c;它们可以在高并发的应用中导致性能问题。以下是它们的解释&#xff1a; 缓存击穿&#xff08;Cache Miss&#xff09; 缓存击穿指的是在高并发情况下&#xff0c;有大…

手动下载/安装Xcode的simulator

目录 前言解决方案1.获取simulator包下载地址1.1 Apple后台1.2 手动 2.使用三方下载工具下载3.使用命令安装simulator 前言 Xcode某个版本更新之后不带iOS的Simulator,导致全新下载一个Xcode后没法编译项目.公司的网又很坑,每次断掉点重试都重新下载,导致完全没法下下来.特别影…

了解什么是JWT的原理及实际应用

目录 一、介绍&讲述 ( 1 ) 什么是JWT ( 2 ) 为什么要学 二、结构 三、Jwt的工具类的使用 1. 依赖 2. 工具类 3. 过滤器 4. 控制器 5. 配置 6. 测试类 用于生成JWT 解析Jwt 复制jwt&#xff0c;并延时30分钟 测试JWT的有效时间 测试过期JWT的解析 四、…

紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示,OV7725采集,提供PDS工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像缩放方案推荐FPGA视频拼接叠加融合方案推荐紫光同创FPGA图像采集方案推荐紫光同创FPGA图像缩放方案推荐紫光同创FPGA视频拼接方案推荐 3、设计思路框架为什么选择OV7725摄像头&#xff1f;视频源选择OV7725摄像头配置及采集动态彩…

【Rust笔记】浅聊 Rust 程序内存布局

浅聊Rust程序内存布局 内存布局看似是底层和距离应用程序开发比较遥远的概念集合&#xff0c;但其对前端应用的功能实现颇具现实意义。从WASM业务模块至Nodejs N-API插件&#xff0c;无处不涉及到FFI跨语言互操作。甚至&#xff0c;做个文本数据的字符集转换也得FFI调用操作系统…

记一次fineBI的增量删除更新BUG

官方文档链接是https://help.fanruan.com/finebi/doc-view-1663.html 按照官方文档&#xff0c;增量删除不能使用select * &#xff0c;且需要指定分区建 但实际指定分区键有时候也会报错&#xff0c;因为表设置的字段有时候会比数据源少&#xff0c;此时会报错&#xff0c;提…

使用kubectl连接远程Kubernetes(k8s)集群

使用kubectl连接远程Kubernetes集群 环境准备下载kubectl下载地址 安装kubectl并处理配置文件Windows的安装配置安装kubectl拉取配置文件 Mac的安装配置安装kubectl拉取配置文件kubectl命令自动补全 Linux的安装配置安装kubectl拉取配置文件kubectl命令自动补全 环境准备 你需…

钢筋智能测径仪 光圆与带肋钢筋均可检测!

在一个大规模、高效、连续的工业生产中&#xff0c;制造业正朝着自动化方向快速优化发展&#xff0c;这种自动化的生产需要快速、准确地分析控制生产工艺中的参数&#xff0c;超差及时提示&#xff0c;为操作工对工厂的运行和自我调节做出快速反应&#xff0c;人工操作越来越不…

源码部署lamt架构

源码部署lamt架构 lamt由apache&#xff0c;mysql&#xff0c;tomcat三者组成 文章目录 源码部署lamt架构1.准备工作1.1.配置yum源&#xff0c;关闭防火墙和selinux1.2.拉取相应源码包 2.安装apache3.安装mariadb4.安装tomcat 1.准备工作 1.1.配置yum源&#xff0c;关闭防火墙…

android之TextView自由选择复制

文章目录 前言一、效果图二、实现步骤1.OnSelectListener2.SelectionInfo类3.TextLayoutUtil类4.复制弹框的xml布局5.弹框背景Drawable6.倒三角Drawable7.复制工具类8.调用 总结 前言 根据时代进步&#xff0c;那些干产品的也叼砖起来了&#xff0c;今天就遇到一个需求&#x…

竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

can的波特率/比特率

can控制器只需要进行少量的设置就可以进行通信&#xff0c;就像RS232那样。其中较难设置的部分就是通信波特率的计算。can总线能够在一定范围内容忍总线上can节点的通信波特率的偏差&#xff0c;这种技能使得can总线有很强的容错性&#xff0c;同时也降低了对每个节点的振荡器精…

golang 獲取 prometheus數據

使用github上的一個庫 1.安裝庫 go get github.com/prometheus/client_golang 2.導入 在import中導入&#xff0c;記得要在go.mod中更新一下 ------------------------------------------------------------------------------------ Address: "http://xx.xx.xx:9090…