如何實作(擴展)EFCORE在訪問資料庫時中間使用Redis做快取查詢?
uj5u.com熱心網友回復:
.net 如何儲存和查詢 redis 可以很容易查詢到許多資料,必經它特別簡單。redis 是非常雞肋的,它只是比 SQL Server 稍微簡單一點點兒,能表達的東西根本不是物件,而只是結構簡單地資料記錄,程式員卻需要額外撰寫很多代碼。
.net 程式中我們使用快取,最關鍵地,不管是本地快取還是網路分布式快取,第一是“有狀態的面向物件的”,第二是“自動管理集群和路由”的,快取是面向物件的,帶有狀態的,自動將c#業務邏輯代碼部署到物件那里去的。當面對的高并發需求和系統復雜度到了一定級別時,才能知道這種真正分布式的系統的必要性。而不為了過分簡單的資料找個帶有昂貴的記憶體條的主機去“快取”。
uj5u.com熱心網友回復:
最基本的語意就是,例如我寫var obj = Common.Program.Conn.GetGrain<IStock>(code);這表示了這個盤點代碼是部署在網路眾多服務器上的程式,我可以將1萬個存貨分別、并發、異步地與5000個盤點記錄進行比對處理,每一種類的存貨都有自己的盤點程式,分別由不同的開發商(或者程式員)開發,開發完隨時增量部署到網路服務器中。而我的“客戶端程式”只是自然而然地通過分布式快取物件來呼叫網路上的分布式計算能力,而不是過分簡單地反復阻塞網路帶寬進行“增刪改查”。
obj.盤點(record);
uj5u.com熱心網友回復:
1、Visual Studio 2019新建一個asp.net core專案,選擇Api模板。專案應包含一個示例的WeatherForecastController。2、編輯WeatherForecastController.cs,添加一個IDistributedCache成員,并引入命名空間。
...
using Microsoft.Extensions.Caching.Distributed;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
private readonly IDistributedCache _cache;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IDistributedCache cache)
{
_logger = logger;
_cache = cache;
}
3、安裝nuget包 Microsoft.Extensions.Caching.StackExchangeRedis,當前版本為3.1.5。
4、該nuget包提供了StackExchangeRedis客戶,并可以提供了IDistributedCache服務。
5、編輯Startup.cs,注入IDistributedCache服務,其中“redis-server:6379”要換成你可以使用的Redis服務器地址。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddStackExchangeRedisCache(options => options.Configuration = "redis-server:6379");
}
6、這樣就可以使用Redis提供的快取了。比如,你可以改寫WeatherForecastController下的IEnumerable<WeatherForecast> Get() Api,應用快取服務:
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
const string cacheKey = "my-weather-forecast";
var cacheOneMinute = new DistributedCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(1) };
var json = _cache.GetString(cacheKey);
if (json == null)
{
var rng = new Random();
var list = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
json = JsonConvert.SerializeObject(list);
_cache.SetString(cacheKey, json, cacheOneMinute);
}
return JsonConvert.DeserializeObject<IEnumerable<WeatherForecast>>(json);
}
7、運行程式,重繪頁面,可以觀察到快取結果,例子中為一分鐘。一分鐘內重繪,結果將不會改變。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/28004.html
標籤:C#
上一篇:C#轉換成vb.net問題
下一篇:entity framework
