.NET Core下使用KeyDB高可用缓存集群
前言
提到缓存,首先会想到Redis,它是目前最流行的开源内存键值存储服务。使用单个Redis实例进行缓存非常简单,如果创建高可用集群,则需要一个主节点、两个从节点和多个监视主节点的哨兵节点:
KeyDB
KeyDB是Redis的高性能分支,专注于多线程、内存效率和高吞吐量。KeyDB支持主动复制功能,每个节点都设置成主节点,节点之间互相同步数据:
Demo
下面我们演示用CentOS创建KeyDB集群,并用ASP.NET Core Web API使用缓存。
一、安装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 16379
requirepass qwe123
masterauth qwe123
active-replica yes
replicaof 127.0.0.1 26379
db2.conf配置相同,只是把端口互换一下。分别运行下列命令启动集群:
keydb-server db1.conf
keydb-server db2.conf
二、安装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集群。
三、创建示例应用
新建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没有任何区别。
四、Demo
运行程序,效果如下:
停止任一KeyDB节点,程序还是能够正常工作。
结论
在本文中,我们介绍了KeyDB集群,确实比Redis集群使用要简单很多。可以把使用Redis的程序无缝切换过来,你还不赶快试一下!
- EOF -
看完本文有收获?请转发分享给更多人
推荐关注「DotNet」,提升.Net技能
点赞和在看就是最大的支持❤️