国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

房地產(chǎn)網(wǎng)站解決方案女孩子做運營是不是壓力很大

房地產(chǎn)網(wǎng)站解決方案,女孩子做運營是不是壓力很大,如何設(shè)計商務(wù)網(wǎng)站,軟件公司網(wǎng)站源碼分布式緩存是由多個應用服務(wù)器共享的緩存,通常作為訪問它的應用服務(wù)器的外部服務(wù)進行維護。 分布式緩存可以提高 ASP.NET Core 應用的性能和可伸縮性,尤其是當應用由云服務(wù)或服務(wù)器場托管時。 與其他將緩存數(shù)據(jù)存儲在單個應用服務(wù)器上的緩存方案相比&am…

分布式緩存是由多個應用服務(wù)器共享的緩存,通常作為訪問它的應用服務(wù)器的外部服務(wù)進行維護。 分布式緩存可以提高 ASP.NET Core 應用的性能和可伸縮性,尤其是當應用由云服務(wù)或服務(wù)器場托管時。

與其他將緩存數(shù)據(jù)存儲在單個應用服務(wù)器上的緩存方案相比,分布式緩存具有多個優(yōu)勢。

當分發(fā)緩存數(shù)據(jù)時,數(shù)據(jù):

  • 在多個服務(wù)器的請求之間保持一致(一致性)。
  • 在進行服務(wù)器重啟和應用部署后仍然有效。
  • 不使用本地內(nèi)存。

1. 分布式緩存的使用

.NET Core 框架下對于分布式緩存的使用是基于 IDistributedCache 接口的,通過它進行抽象,統(tǒng)一了分布式緩存的使用方式,它對緩存數(shù)據(jù)的存取都是基于 byte[] 的。

IDistributedCache?接口提供以下方法來處理分布式緩存實現(xiàn)中的項:

  • Get、GetAsync:如果在緩存中找到,則接受字符串鍵并以 byte[] 數(shù)組的形式檢索緩存項。
  • Set、SetAsync:使用字符串鍵將項(作為 byte[] 數(shù)組)添加到緩存。
  • Refresh、RefreshAsync:根據(jù)鍵刷新緩存中的項,重置其可調(diào)到期超時(如果有)。
  • Remove、RemoveAsync:根據(jù)字符串鍵刪除緩存項。

使用的時候只需要將其通過容器注入到相應的類中即可。

2. 分布式緩存的接入

分布式緩存是基于特定的緩存應用實現(xiàn)的,需要依賴特定的第三方應用,在接入特定的分布式緩存應用時,需要應用對于的 Nuget 包,微軟官方提供了基于 SqlServer 、Redis 實現(xiàn)分布式緩存的 Nuget 包,還推薦了基于 Ncache 的方案,除此之外還有像 Memcache 之類的方案,微軟雖然沒有提供相應的 Nuget 包,但是社區(qū)也有相關(guān)開源的項目。

這里只講 .NET Core 下兩種分布式緩存的接入和使用,一種是分布式內(nèi)存緩存,一種是使用得比較廣泛的 Redis。其他的在 .NET Core 框架下的使用是差不多的,僅僅只是接入的時候有點區(qū)別。當然,Redis 除了作為分布式緩存來使用,還有其他更加豐富的一些功能,后續(xù)也會找時間進行一些介紹。

2.1 基于內(nèi)存的分布式緩存

分布式內(nèi)存緩存 (AddDistributedMemoryCache) 是框架提供的 IDistributedCache 實現(xiàn),用于將項存儲在內(nèi)存中,它就在?Microsoft.Extensions.Caching.Memory?Nuget 包中。 分布式內(nèi)存緩存不是真正的分布式緩存。 緩存項由應用實例存儲在運行該應用的服務(wù)器上。

分布式內(nèi)存緩存是一個有用的實現(xiàn):

  • 在開發(fā)和測試場景中。

  • 當在生產(chǎn)環(huán)境中使用單個服務(wù)器并且內(nèi)存消耗不重要時。 實現(xiàn)分布式內(nèi)存緩存會抽象緩存的數(shù)據(jù)存儲。 如果需要多個節(jié)點或容錯,它允許在未來實現(xiàn)真正的分布式緩存解決方案。

當應用在 Program.cs 的開發(fā)環(huán)境中運行時,我們可以通過以下方式使用分布式緩存,以下示例代碼基于 .NET 控制臺程序:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;var host = Host.CreateDefaultBuilder(args).ConfigureServices(services =>{services.AddDistributedMemoryCache();}).Build();host.Run();

之后還是和內(nèi)存緩存差不多的例子,演示一下緩存的存取、刪除、刷新。

public interface IDistributedCacheService
{Task PrintDateTimeNow();
}
public class DistributedCacheService : IDistributedCacheService
{public const string CacheKey = nameof(DistributedCacheService);private readonly IDistributedCache _distributedCache;public DistributedCacheService(IDistributedCache distributedCache){_distributedCache = distributedCache;}public async Task FreshAsync(){await _distributedCache.RefreshAsync(CacheKey);}public async Task PrintDateTimeNowAsync(){var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");var cacheValue = await _distributedCache.GetAsync(CacheKey);if(cacheValue == null){// 分布式緩存對于緩存值的存取都是基于 byte[],所以各種對象必須先序列化為字符串,之后轉(zhuǎn)換為 byte[] 數(shù)組cacheValue = Encoding.UTF8.GetBytes(time);var distributedCacheEntryOption = new DistributedCacheEntryOptions(){//AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(20),AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20),SlidingExpiration = TimeSpan.FromSeconds(3)};// 存在基于字符串的存取擴展方法,內(nèi)部其實也是通過 Encoding.UTF8 進行了編碼// await _distributedCache.SetStringAsync(CacheKey, time, distributedCacheEntryOption);await _distributedCache.SetAsync(CacheKey, cacheValue, distributedCacheEntryOption);}time = Encoding.UTF8.GetString(cacheValue);Console.WriteLine("緩存時間:" + time);Console.WriteLine("當前時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));}public async Task RemoveAsync(){await _distributedCache.RemoveAsync(CacheKey);}
}

之后,在入口文件添加以下代碼,查看控制臺結(jié)果是否與預想的一致:

using DistributedCacheSample;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;var host = Host.CreateDefaultBuilder(args).ConfigureServices(services =>{services.AddDistributedMemoryCache();services.AddTransient<IDistributedCacheService, DistributedCacheService>();}).Build();var distributedCache = host.Services.GetRequiredService<IDistributedCacheService>();
// 第一次調(diào)用,設(shè)置緩存
Console.WriteLine("第一次調(diào)用,設(shè)置緩存");
await distributedCache.PrintDateTimeNowAsync();
await Task.Delay(TimeSpan.FromSeconds(1));
// 未過滑動時間,數(shù)據(jù)不變
Console.WriteLine("未過滑動時間,數(shù)據(jù)不變");
await distributedCache.PrintDateTimeNowAsync();
await Task.Delay(TimeSpan.FromSeconds(3));
// 已過滑動時間,數(shù)據(jù)改變
Console.WriteLine("已過滑動時間,數(shù)據(jù)改變");
await distributedCache.PrintDateTimeNowAsync();
await Task.Delay(TimeSpan.FromSeconds(1));
// 未過滑動時間,手動刷新過期時間
Console.WriteLine("未過滑動時間,手動刷新過期時間");
await distributedCache.FreshAsync();
await Task.Delay(TimeSpan.FromSeconds(2));
// 距離上一次調(diào)用此方法,已過滑動時間,但由于手動刷新過過期時間,過期時間重新計算,數(shù)據(jù)不變
Console.WriteLine("距離上一次調(diào)用此方法,已過滑動時間,但由于手動刷新過過期時間,過期時間重新計算,數(shù)據(jù)不變");
await distributedCache.PrintDateTimeNowAsync();
await Task.Delay(TimeSpan.FromSeconds(2));
// 移除緩存
Console.WriteLine("移除緩存");
await distributedCache.RemoveAsync();
// 原有的緩存已移除,調(diào)用此方法是重新設(shè)置緩存,數(shù)據(jù)改變
Console.WriteLine("原有的緩存已移除,調(diào)用此方法是重新設(shè)置緩存,數(shù)據(jù)改變");
await distributedCache.PrintDateTimeNowAsync();host.Run();

image

結(jié)果和預想的是一致的。

2.2 基于 Redis 的分布式緩存

Redis?是一種開源的基于內(nèi)存的非關(guān)系型數(shù)據(jù)存儲,通常用作分布式緩存。在 .NET Core 框架中使用 Redis 實現(xiàn)分布式緩存,需要引用?Microsoft.Extensions.Caching.StackExchangeRedis?Nuget 包,包中通過?AddStackExchangeRedisCache?添加?RedisCache?實例來配置緩存實現(xiàn),該類基于 Redis 實現(xiàn)了 IDistributedCache 接口。

(1) 安裝 Redis

這里我在云服務(wù)器上通過 Docker 快速安裝了 Redis ,映射容器內(nèi) Redis 默認端口 6379 到主機端口 6379,并且設(shè)置了訪問密碼為 123456 。

docker run -d --name redis -p 6379:6379 redis --requirepass "123456"

(2) 應用添加依賴包,并且通過配置服務(wù)依賴關(guān)系

Install-Package Microsoft.Extensions.Caching.StackExchangeRedis

或者通過 VS 的 Nuget 包管理工具進行安裝

依賴關(guān)系配置如下:

var host = Host.CreateDefaultBuilder(args).ConfigureServices(services =>{// services.AddDistributedMemoryCache();services.AddStackExchangeRedisCache(opyions =>{opyions.Configuration = "xxx.xxx.xxx.xxx:6379,password=123456";});}).Build();

這里只需要將原來的分布式內(nèi)存緩存服務(wù)的配置切換為分布式 Redis 緩存的配置即可,其他的什么都不用改,就可以從內(nèi)存緩存切換到 Redis 分布式緩存了。所以我們在日常工作的應用搭建中推薦使用基于分布式緩存方案,前期或者開發(fā)環(huán)境中可以使用基于內(nèi)存的分布式緩存,后面項目的性能要求高了,可以很方便地切換到真正的分布式緩存,只需改動一行代碼。

之后基于前面的例子運行應用,可以看到輸出的結(jié)果是一樣的。

image

而在 Redis 上也可以看得到我們緩存上去的數(shù)據(jù)。

image

這里還有一個要注意的點,理論上使用分布式緩存是能夠增強應用的性能和體驗性的,但是像 Redis 這樣的分布式緩存一般情況下是和應用部署在不同的服務(wù)器,每一次緩存的獲取會存在一定的網(wǎng)絡(luò)傳輸消耗,當緩存的數(shù)據(jù)量比較大,而且緩存存取頻繁的時候,也會有很大的性能消耗。之前在項目中就遇到過這樣的問題,由于一個查詢功能需要實時進行計算,計算中需要進行循環(huán),而計算依賴于基礎(chǔ)數(shù)據(jù),這部分的數(shù)據(jù)是使用緩存的,當初直接使用 Redis 緩存性能并不理想。當然可以說這種方式是有問題的,但是當時由于業(yè)務(wù)需要,封裝的計算方法中需要在應用啟動的時候由外部初始化基礎(chǔ)數(shù)據(jù),為基礎(chǔ)數(shù)據(jù)能夠根據(jù)前端改動而刷新,所以用了緩存的方式。

下面是一個示例進行內(nèi)存緩存和 Redis 緩存的對比:

這里利用 BenchmarkDotNet 進行性能測試,需要先對原有的代碼進行一下改造,這里調(diào)整了一下構(gòu)造函數(shù),自行實例化相關(guān)緩存的對象,之后有三個方法,分別使用 Redis 緩存、內(nèi)存緩存、內(nèi)存緩存結(jié)合 Redis 緩存,每個方法中模擬業(yè)務(wù)中的1000次循環(huán),循環(huán)中緩存數(shù)據(jù)進行存取。

點擊查看性能測試代碼

 

Program.cs 文件中只保留以下代碼:

Summary summary = BenchmarkRunner.Run<DistributedCacheService>();
Console.ReadLine();

測試結(jié)果如下:

image

可以看到這種情況下使用 Redis 緩存性能是慘不忍睹的,但是另外兩種方式就不一樣了。

我們在業(yè)務(wù)中的緩存最終就是第三種方法的方式,結(jié)合內(nèi)存緩存和 Redis 緩存,根本的思路就是在使用時將數(shù)據(jù)臨時保存在本地,減少網(wǎng)絡(luò)傳輸?shù)南?#xff0c;并且根據(jù)實際業(yè)務(wù)情況控制內(nèi)存緩存的超時時間以保持數(shù)據(jù)的一致性。?

http://aloenet.com.cn/news/31354.html

相關(guān)文章:

  • 企業(yè)網(wǎng)站 asp php網(wǎng)絡(luò)優(yōu)化工具app手機版
  • 哪些專門做批發(fā)的網(wǎng)站有哪些短網(wǎng)址鏈接生成
  • 網(wǎng)站制作文案杭州長治seo顧問
  • seo發(fā)布網(wǎng)站某網(wǎng)站搜索引擎優(yōu)化
  • 網(wǎng)站開發(fā)包含上線嗎網(wǎng)絡(luò)營銷的六大功能
  • wordpress網(wǎng)站例昆明網(wǎng)絡(luò)營銷
  • 在國外做盜版電影網(wǎng)站嗎seo發(fā)帖工具
  • 做內(nèi)貿(mào)的網(wǎng)站武漢網(wǎng)站設(shè)計十年樂云seo
  • 做網(wǎng)站需要備案么長沙seo培訓班
  • 撫順市城市建設(shè)檔案館網(wǎng)站安卓優(yōu)化大師新版
  • 做平臺網(wǎng)站外包多少錢啊常見的網(wǎng)絡(luò)營銷方式有哪幾種
  • 京東網(wǎng)上購物平臺如何快速優(yōu)化網(wǎng)站排名
  • 網(wǎng)站制作方案書博客網(wǎng)
  • 訂閱號欄目里做微網(wǎng)站網(wǎng)站排名靠前
  • 網(wǎng)絡(luò)營銷專業(yè)建議百度seo優(yōu)化收費標準
  • 兩學一做教育考試網(wǎng)站微信小程序怎么開通
  • WordPress微信密碼seo初級入門教程
  • 物聯(lián)網(wǎng)型網(wǎng)站開發(fā)企業(yè)網(wǎng)站建設(shè)服務(wù)
  • 做網(wǎng)站買域名網(wǎng)絡(luò)營銷策劃方案3000字
  • 建筑室內(nèi)設(shè)計公司排名seo人工智能
  • 中國建設(shè)門戶網(wǎng)站紀念幣看seo
  • 做網(wǎng)站一般收取多少錢國際重大新聞
  • 深圳市城鄉(xiāng)和建設(shè)局網(wǎng)站首頁貼吧推廣
  • 有沒有免費的網(wǎng)站推銷產(chǎn)品如何做網(wǎng)絡(luò)推廣
  • 成都市 網(wǎng)站建設(shè)福州短視頻seo公司
  • 深圳有做網(wǎng)站公司打廣告去哪個平臺
  • 深圳手機網(wǎng)站制作公司全網(wǎng)搜索軟件
  • 一個人能建設(shè)一個公司網(wǎng)站嗎短視頻seo是什么
  • 南山網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷培訓
  • 網(wǎng)站建設(shè)經(jīng)理網(wǎng)站關(guān)鍵詞在哪里看