.Net Core下使用KeyDB高可用缓存集群
前言
提到緩存,首先會想到Redis,它是目前最流行的開源內(nèi)存鍵值存儲服務。
使用單個Redis實例進行緩存非常簡單,如果創(chuàng)建高可用集群,則需要一個主節(jié)點、兩個從節(jié)點和多個監(jiān)視主節(jié)點的哨兵節(jié)點:
哨兵節(jié)點監(jiān)控主節(jié)點的狀態(tài),一旦出現(xiàn)故障,則將其中一個從節(jié)點提升為主節(jié)點。
為了高可用集群正常工作,哨兵節(jié)點需要為單數(shù),不僅要監(jiān)控主副節(jié)點,它們之間也要互相監(jiān)控。
一旦某個哨兵節(jié)點出現(xiàn)故障,則主從切換可能失效。
可以看到,這種方式不僅部署復雜,對運維也有較高要求。
KeyDB
KeyDB是Redis的高性能分支,專注于多線程、內(nèi)存效率和高吞吐量。
KeyDB支持主動復制功能,每個節(jié)點都設置成主節(jié)點,節(jié)點之間互相同步數(shù)據(jù):
KeyDB允許你讀取和寫入所有節(jié)點,這可以增加高負載下的讀取,并可保證如果一個節(jié)點出現(xiàn)故障,另一個將繼續(xù)工作。
Demo
下面,我們演示用CentOS創(chuàng)建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個節(jié)點組成集群,創(chuàng)建配置文件db1.conf:
port?16379requirepass?qwe123 masterauth?qwe123active-replica?yes replicaof?127.0.0.1?26379db2.conf配置相同,只是把端口互換一下。
分別運行下列命令啟動集群:
keydb-server?db1.confkeydb-server?db2.conf2. 安裝Nginx
Nginx用作負載均衡,讓處于主動復制模式的任一KeyDB節(jié)點都可以接收數(shù)據(jù)。
數(shù)據(jù)也會被復制到其他節(jié)點,如果一個節(jié)點出現(xiàn)故障,另一個將承擔負載,直到問題得到解決。
下載Windows版最新的Nginx,修改conf\nginx.conf后運行。
nginx.conf內(nèi)容如下:
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監(jiān)聽本機的6379端口,并且請求轉(zhuǎn)發(fā)到KeyDB集群。
3. 創(chuàng)建示例應用
新建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實現(xiàn)代碼如下:
[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沒有任何區(qū)別。
4. Demo
運行程序,效果如下:
可以看到2個KeyDB節(jié)點都有數(shù)據(jù):
停止任一KeyDB節(jié)點,程序還是能夠正常工作。
結論
在本文中,我們介紹了KeyDB集群,確實比Redis集群使用要簡單很多。
可以把使用Redis的程序無縫切換過來,你還不趕快試一下!
如果你覺得這篇文章對你有所啟發(fā),請關注我的個人公眾號”My IO“,記住我!
總結
以上是生活随笔為你收集整理的.Net Core下使用KeyDB高可用缓存集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛!又一顶级大厂开招.NET,5年35k
- 下一篇: 浅析 Dapr 里的云计算设计模式