.Net Core下使用KeyDB高可用缓存集群

前言

提到缓存,首先会想到Redis,它是目前最流行的开源内存键值存储服务。

使用单个Redis实例进行缓存非常简单,如果创建高可用集群,则需要一个主节点、两个从节点和多个监视主节点的哨兵节点:

哨兵节点监控主节点的状态,一旦出现故障,则将其中一个从节点提升为主节点。

为了高可用集群正常工作,哨兵节点需要为单数,不仅要监控主副节点,它们之间也要互相监控。

一旦某个哨兵节点出现故障,则主从切换可能失效。

可以看到,这种方式不仅部署复杂,对运维也有较高要求。

KeyDB

KeyDB是Redis的高性能分支,专注于多线程、内存效率和高吞吐量。

KeyDB支持主动复制功能,每个节点都设置成主节点,节点之间互相同步数据:

KeyDB允许你读取和写入所有节点,这可以增加高负载下的读取,并可保证如果一个节点出现故障,另一个将继续工作。

Demo

下面,我们演示用CentOS创建KeyDB集群,并用ASP.NET Core Web API使用缓存。

1. 安装KeyDB集群

运行下列命令安装KeyDB:

wget https://download.keydb.dev/pkg/open_source/rpm/centos7/x86_64/keydb-latest-1.el7.x86_64.rpm
sudo yum install ./keydb-latest-1.el7.x86_64.rpm

这里使用了同一台机器的2个端口(16379、26379)作为2个节点组成集群,创建配置文件db1.conf:

port 16379requirepass qwe123
masterauth qwe123active-replica yes
replicaof 127.0.0.1 26379

db2.conf配置相同,只是把端口互换一下。

分别运行下列命令启动集群:

keydb-server db1.confkeydb-server db2.conf

2. 安装Nginx

Nginx用作负载均衡,让处于主动复制模式的任一KeyDB节点都可以接收数据。

数据也会被复制到其他节点,如果一个节点出现故障,另一个将承担负载,直到问题得到解决。

下载Windows版最新的Nginx,修改conf\nginx.conf后运行。

nginx.conf内容如下:

events {worker_connections  1024;
}stream
{upstream keydb{server 192.168.1.10:16379;server 192.168.1.10:26379;}server{listen 127.0.0.1:6379;proxy_pass keydb;proxy_protocol off;}}

Nginx监听本机的6379端口,并且请求转发到KeyDB集群。

3. 创建示例应用

新建ASP.NET Core Web API。

由于KeyDB和Redis完全兼容,可以直接使用Redis的客户端类库

引用nuget包Microsoft.Extensions.Caching.StackExchangeRedis,修改Startup.cs:

public void ConfigureServices(IServiceCollection services)
{services.AddStackExchangeRedisCache(options =>{options.Configuration = this.Configuration.GetConnectionString("keydb");});...
}

修改appsettings.json增加配置,连接串对应Nginx地址:

"ConnectionStrings": {"keydb": "localhost:6379,password=qwe123"}

Controller实现代码如下:

[HttpGet]
public async Task<string> Get()
{var key = "KeyDbDemo";string result = await _cache.GetStringAsync(key);if (string.IsNullOrEmpty(result)){//缓存60秒var cacheEntryOptions = new DistributedCacheEntryOptions();cacheEntryOptions.SlidingExpiration = TimeSpan.FromSeconds(60);await _cache.SetStringAsync(key, "My IO", cacheEntryOptions);return "No Cache";}return result;
}

可见和使用Redis没有任何区别。

4. Demo

运行程序,效果如下:

可以看到2个KeyDB节点都有数据:

停止任一KeyDB节点,程序还是能够正常工作。

结论

在本文中,我们介绍了KeyDB集群,确实比Redis集群使用要简单很多。

可以把使用Redis的程序无缝切换过来,你还不赶快试一下!

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

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

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

相关文章

超赞!世界10个著名悖论的最终解答来了!

全世界只有3.14 % 的人关注了爆炸吧知识今天小编看到一篇作者Das对十大悖论的个人理解&#xff0c;觉得挺有意思&#xff0c;现在便分享给模友们看看&#xff0c;你们的想法是怎样的呢&#xff1f;电车难题引用&#xff1a;“电车难题”是伦理学领域最为知名的思想实验之一&…

设置计算机网络密码怎么设置路由器,如何在计算机上设置路由器密码?

问: 如何在计算机上设置路由器密码&#xff1f;A: 在计算机浏览器中&#xff0c;输入路由器的管理地址&#xff0c;打开登录页面&#xff0c;输入登录密码&#xff0c;然后进入设置页面.然后打开无线设置或Wi-Fi设置选项&#xff0c;您可以设置无线密码(wifi密码). 打开此选项可…

hive sql 怎么实现循环_不出办公室就能无水造纸?让废纸“秒循环再生”怎么实现的...

废纸变为再生纸&#xff0c;不出办公室就能循环利用起来&#xff0c;既节省大量木材&#xff0c;还不消耗一滴水……第三届进博会上&#xff0c;首次参展的打印巨头爱普生带来其全球首创的“干纤维纸张循环系统”&#xff0c;环保效果令人赞叹&#xff0c;吸引大批观众前来围观…

两头编程,测试中间

最近在做一些开发测试代码的工作&#xff0c;就是为了测试中间业务程序&#xff0c;前头调用程序&#xff0c;后头写挡板程序&#xff0c;说白了就是链路调用&#xff0c;因为复杂度在中间的业务程序&#xff0c;所以前后两端的程序应相对简单。这里就有一个问题&#xff1a;技…

Win32 窗口篇(3)

1.11 如何显示或隐藏窗口的标题栏 使用ModifyStyle方法改变参数来更改窗体样式 void CDemoDlg::OnTest1() {//删除标题栏风格ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); }void CDemoDlg::OnTest2() {//添加标题栏风格ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); …

linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列

来源CSDN:CSDN-专业IT技术社区-登录​blog.csdn.net一、概念和原理消息队列是另一种标准IPC,当然也大概遵循大部分标准消息队列,它是存放消息(数据)的队列&#xff0c;而队列是先进先出的线性数据结构换句话说,我们就是利用这个数据结构 进行进程间的通信消息队列允许多个进程同…

15个只有数学老师懂的泪流满面瞬间

全世界只有3.14 % 的人关注了爆炸吧知识「1」大题算了半天&#xff0c;就是跟标准答案对不上「2」一次令人期待的公开课啊啊——啊...「3」这就是传说中美好的协同教研「4」在网上下了一堆 PPT 准备拼到一起「5」预测高考题「6」临下课了还有三道大题没评讲「7」当我以为我已经…

matlab绘制二元一次函数图像_【八上数学】 一次函数必考知识点(下)

【八上数学】《一次函数》必考知识点(中)【八上数学】《函数、一次函数》必考知识点(上)写在前面本讲&#xff0c;我们重点研究一次函数与一元一次方程&#xff0c;不等式&#xff0c;二元一次方程组的问题&#xff0c;帮助同学们解决一些典型问题&#xff0e;一、一次函数与二…

计算机能代替纸笔英语作文,电脑能代替纸笔吗英语作文

电脑能代替纸笔吗英语作文在现实生活或工作学习中&#xff0c;说到作文&#xff0c;大家肯定都不陌生吧&#xff0c;作文可分为小学作文、中学作文、大学作文(论文)。作文的注意事项有许多&#xff0c;你确定会写吗&#xff1f;以下是小编为大家整理的电脑能代替纸笔吗英语作文…

《WinForm开发系列之高级篇》Item2 TCP异步传输

1.AsySocket.cs 代码 publicclassAsySocket {#region私有字段privateSocket mSocket null;privatestringmID "";#endregion#region构造函数publicAsySocket(string_LocalIP, int_LocalPort) { try{ mSocket newSocket(AddressFamily.InterNetwork, SocketType.Stream…

C# params的用法详解

为了将方法声明为可以接受可变数量参数的方法&#xff0c;我们可以使用params关键字来声明数组,要求&#xff1a;(1)在方法声明中的 params 关键字之后不允许任何其他参数&#xff0c;并且在方法声明中只允许一个 params 关键字。(2)该参数必须标识一个一维数组&#xff0c;但类…

spring 单例 获取多例的位_Spring系列第6篇:玩转bean scope,避免跳坑里!

公众号关注“程序员二哥”&#xff0c;设为‘星标’&#xff0c;带你学习更多的知识。本文内容 详细介绍5中bean的sope及使用注意点自定义作用域的实现应用中&#xff0c;有时候我们需要一个对象在整个应用中只有一个&#xff0c;有些对象希望每次使用的时候都重新创建一个&…

女生的拳头有多厉害?

1 天下武功唯快不破2 狗子&#xff1a;没想到我有这种天赋3 哈哈哈还是你社会啊4 女生的拳头有多厉害&#xff1f;?5 怎么解开的&#xff1f;6 心中有海&#xff0c;脚下有沙&#xff0c;这就是马尔代夫7 你的人生概括

与ln的指数转化公式_高考数学48条秒杀型公式与方法

点上方蓝字&#xff0c;关注“云学冠学习资讯”有助于提高成绩哦&#xff01;除了课本上的常规公式之外&#xff0c;掌握一些必备的秒杀型公式能够帮你在考试的时候节省大量的时间&#xff0c;师姐这次的分享就是48条秒杀公式&#xff0c;直接往下看&#xff01;1.适用条件&…

在C#2.0中使用Nullable可空类型

在C#1.x的版本中&#xff0c;一个值类型变量是不可以被赋予null值的&#xff0c;否则会产生异常。在C#2.0中&#xff0c;微软提供了Nullable类型&#xff0c;允许用它定义包含null值&#xff08;即空值&#xff09;的数据类型&#xff0c;这对处理数据库中包含可选字段以及很多…

豆瓣9.7,这些舍不得看完的神剧,看一集少一集!我刷了一晚上……

全世界只有3.14 % 的人关注了爆炸吧知识今天给大家介绍一位好朋友——小樱&#xff0c;小樱&#xff0c;作为资深美剧迷英语博主&#xff0c;收藏了很多经典美剧、动画资源&#xff0c;每天还会和大家分享新鲜有趣的英语知识。喜欢看美剧追动画和立志学好英语的小伙伴千万别错过…

C#编码规范

1、连接数据库并返回DataTable View Code public DataTable GetDataByTable() { DataSet dataset new DataSet(); DataTable datatable null; SqlConnection sqlConnection new SqlConnection("Data Source.;Initial CatalogCalamity_Dat…

api中文文档 mws_中英文排版规范化 API

此文章对开放数据接口 API 之「中英文排版规范化 API」进行了功能介绍、使用场景介绍以及调用方法的说明&#xff0c;供用户在使用数据接口时参考之用。 1. 产品功能此次开放了中英文排版规范化在线接口&#xff0c;用于自动中英文排版、标点符号格式化&#xff0c;中英混排格式…

计算机管理无法连接虚拟磁盘服务,虚拟磁盘服务错误怎么操作【图文教程】

虚拟磁盘我们大家都可以看到但实际上是不存在的&#xff0c;虚拟的就是假的。虚拟磁盘是通过将一些网络文件或是内存利用科技手段伪造成磁盘&#xff0c;我们通常称它为虚拟磁盘。虚拟磁盘可以给内存增加容量&#xff0c;可以加快磁盘数据交换&#xff0c;提高计算机运行速度。…

记一次 .NET 某机械臂智能机器人控制系统MRS CPU爆高分析

一&#xff1a;背景 1. 讲故事这是6月中旬一位朋友加wx求助dump的故事&#xff0c;他的程序 cpu爆高➕UI卡死&#xff0c;问如何解决&#xff0c;截图如下&#xff1a;在拿到这个dump后&#xff0c;我发现这是一个关于机械臂的MRS程序&#xff0c;哈哈&#xff0c;在机械臂这种…