前言
緩存是提升程序性能必不可少的方法,Asp.net core 支持多級緩存配置,主要有客戶端緩存、服務(wù)器端緩存,內(nèi)存緩存和分布式緩存等。其中客戶端緩和服務(wù)器端緩存在使用上都有比較大的限制,而內(nèi)存緩和分布式緩存則比較靈活。
分布式緩存是一種用于存儲和管理數(shù)據(jù)的技術(shù),它將數(shù)據(jù)存儲在多個節(jié)點上,以實現(xiàn)高可用性、伸縮性和性能優(yōu)化。
分布式緩存通常用于大規(guī)模的應(yīng)用程序中,可以有效地減輕數(shù)據(jù)庫負載,加速數(shù)據(jù)訪問,提高系統(tǒng)的可靠性和性能。
分布式緩存的特點包括:
-
高可用性:分布式緩存采用多節(jié)點部署,數(shù)據(jù)被復(fù)制到多個節(jié)點上,即使某個節(jié)點發(fā)生故障,仍然可以從其他節(jié)點獲取數(shù)據(jù),保證系統(tǒng)的高可用性。
-
性能優(yōu)化:分布式緩存將熱門數(shù)據(jù)存儲在內(nèi)存中,加快數(shù)據(jù)的訪問速度,減少對數(shù)據(jù)庫的頻繁訪問,從而提高系統(tǒng)的性能。
-
數(shù)據(jù)一致性:分布式緩存通過復(fù)制、分片和一致性哈希等技術(shù),確保多個節(jié)點上的數(shù)據(jù)保持一致。
-
伸縮性:分布式緩存可以根據(jù)負載情況動態(tài)擴展,以應(yīng)對不斷增長的數(shù)據(jù)量和訪問量,新的節(jié)點可以很容易地加入到緩存集群中,以提供更大的存儲容量和更高的性能。
常見的分布式緩存系統(tǒng)包括 Redis、Memcached、Ehcache 等,可以方便地在應(yīng)用程序中集成和使用。
本篇主要講解在 asp.net core net6.0 webapi 項目中如何利用 Redis 來實現(xiàn)分布式緩存。
使用步驟
-
下載和安裝 Redis
- https://redis.io/download/
-
打開 Program.cs 文件
-
在語句
var app = builder.Build();
之前注冊內(nèi)存緩存服務(wù)var builder = WebApplication.CreateBuilder(args); ...... //注冊分布式緩存服務(wù) builder.Services.AddStackExchangeRedisCache(options => { // 配置 Redis 連接串 options.Configuration = "127.0.0.1:16379,allowadmin=true"; // 配置緩存Key前綴,避免和其它程序沖突,因為Redis可能其它程序也在使用 options.InstanceName = "test_"; }); ...... var app = builder.Build();
-
打開控制器文件,如 Test1Controller.cs
-
引入分布式緩存命名空間
using Microsoft.Extensions.Caching.Distributed;
-
在構(gòu)造方法注入內(nèi)存緩存服務(wù),如:
private readonly IDistributedCache distCache; public Test1Controller(IDistributedCache distCache) { this.distCache = distCache; }
-
通過分布式緩存的GetString和SetString方法緩存數(shù)據(jù),如:
[HttpGet] public string Now() { var cacheKey = "Now"; string? s = distCache.GetString(cacheKey); if (s == null) { s = DateTime.Now.ToString(); var opt = new DistributedCacheEntryOptions(); opt.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(10); //設(shè)置絕對過期時間 distCache.SetString(cacheKey, s, opt); } return s; }
小技巧
- 代碼中,分布式緩存只支持 String 和 byte[],如果非 String 可以用 Json 把它反序列化為 String 再保存