国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MemoryCache 使用不當(dāng)導(dǎo)致的一個(gè) BUG

開(kāi)發(fā) 前端
前幾天發(fā)現(xiàn)代碼里的一個(gè) BUG,原因是 MemoryCache 使用不當(dāng),可以對(duì)于很多人來(lái)說(shuō)可能都知道,但還是想分享記錄一下,避免以后寫(xiě)出同樣的 BUG

[[423274]]

 Intro

前幾天發(fā)現(xiàn)代碼里的一個(gè) BUG,原因是 MemoryCache 使用不當(dāng),可以對(duì)于很多人來(lái)說(shuō)可能都知道,但還是想分享記錄一下,避免以后寫(xiě)出同樣的 BUG

Sample

直接來(lái)看下面的示例吧

  1. await using var services = new ServiceCollection() 
  2.     .AddMemoryCache() 
  3.     .BuildServiceProvider(); 
  4.  
  5. Console.WriteLine("----- Bad -----"); 
  6. GetValidValues(5).Dump(); 
  7. GetValidValues(8).Dump(); 
  8.  
  9. List<int> GetValidValues(int threhold) 
  10.     var memoryCache = services.GetRequiredService<IMemoryCache>(); 
  11.     var values = memoryCache.GetOrCreate("test1", entry => 
  12.     { 
  13.         return Enumerable.Range(1, 10).ToList(); 
  14.     }); 
  15.     values.RemoveAll(x => x > threhold); 
  16.     return values

上面的 Dump 是一個(gè)擴(kuò)展方法就是把 list 內(nèi)的元素輸出出來(lái),實(shí)現(xiàn)如下:

  1. public static void Dump(this List<intvalues
  2.     var value = string.Join(","values); 
  3.     Console.WriteLine(value); 

好了,來(lái)想一下上面的輸出結(jié)果會(huì)是什么吧,期望的結(jié)果應(yīng)該是每次都輸出小于等于輸入的值,實(shí)際是什么樣的呢?實(shí)際輸出結(jié)果如下:

Fix

可以看到第二次輸出的結(jié)果和我們的期望不同,之所以會(huì)出現(xiàn)上面的問(wèn)題是因?yàn)?MemoryCache 的對(duì)象是直接保存在內(nèi)存中的對(duì)象,緩存不發(fā)生變化時(shí)每次都是返回同一個(gè)對(duì)象,如果發(fā)生修改后面再獲取的就是修改后的狀態(tài)了,所以正確的做法應(yīng)該要返回一個(gè)新的對(duì)象而不是修改原來(lái)的對(duì)象,一個(gè)修改方法如下:

  1. List<int> GetValidValues(int threhold) 
  2.     var memoryCache = services.GetRequiredService<IMemoryCache>(); 
  3.     var values = memoryCache.GetOrCreate("test", entry => 
  4.     { 
  5.         return Enumerable.Range(1, 10).ToList(); 
  6.     }); 
  7.     return values.Where(v => v <= threhold).ToList(); 

修改后的輸出結(jié)果如下:

More

MemoryCache 背后實(shí)際是一個(gè) ConcurrentDictionary,value 是一個(gè)帶著過(guò)期時(shí)間的對(duì)象 CacheEntry,

在不過(guò)期,沒(méi)有發(fā)生變化的時(shí)候每次返回都是同一個(gè)對(duì)象,作為緩存對(duì)象,應(yīng)該進(jìn)行只讀操作,不應(yīng)該修改緩存的對(duì)象,如果需要修改則應(yīng)創(chuàng)建新的對(duì)象,而非使用原來(lái)的對(duì)象。

References

https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Caching.Memory/src/MemoryCache.cs#L26

https://github.com/dotnet/runtime/blob/main/src/libraries/Microsoft.Extensions.Caching.Memory/src/CacheEntry.cs

https://github.com/WeihanLi/SamplesInPractice/blob/master/MemoryCacheSample/Program.cs

 

責(zé)任編輯:武曉燕 來(lái)源: amazingdotnet
相關(guān)推薦

2025-07-28 06:38:07

2025-07-16 07:20:00

開(kāi)發(fā)代碼并發(fā)

2020-10-22 07:09:19

TCP網(wǎng)絡(luò)協(xié)議

2019-10-10 15:40:17

redisbug數(shù)據(jù)庫(kù)

2021-05-20 10:02:50

系統(tǒng)Redis技巧

2024-06-28 10:01:04

2022-06-21 11:24:05

多線程運(yùn)維

2021-06-10 06:59:34

Redis應(yīng)用API

2024-09-05 08:07:55

2024-02-04 08:26:38

線程池參數(shù)內(nèi)存

2009-12-17 14:53:52

VS2008程序

2022-10-25 18:00:00

Redis事務(wù)生產(chǎn)事故

2021-08-26 14:26:25

Java代碼集合

2010-01-06 10:56:47

華為交換機(jī)使用

2021-07-11 09:34:45

ArrayListLinkedList

2011-08-18 13:49:32

筆記本技巧

2020-02-06 11:30:08

代碼JavaScript&&

2020-11-16 12:35:25

線程池Java代碼

2025-02-13 07:00:00

Dubbo-goJava服務(wù)端

2009-09-14 17:08:02

WebFormView
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

成人禁在线观看网站| 亚洲欧美日韩精品久久| 69**夜色精品国产69乱| 五月婷婷视频在线观看| 亚洲午夜激情av| 妞干网视频在线观看| 国产传媒欧美日韩成人精品大片| 99精品热视频| 麻豆md0077饥渴少妇| 天天av综合| 青青青国产精品一区二区| 人人鲁人人莫人人爱精品| 日韩欧美亚洲国产另类| 福利片免费在线观看| 久久精品男人天堂av| 国产日韩欧美精品在线观看| 国产一区二区在线免费观看| 伊人久久大香线蕉av一区| 欧美综合二区| 午夜一区二区三区| 美女一区二区久久| 国产黄色激情视频| 成人h动漫精品| 天天影视色香欲综合网天天录日日录| 久久精品国产一区二区三| 一区二区三区国| 成人精品免费网站| www.日本视频| 欧美日韩一区二区三区四区| 可以看毛片的网址| 久久亚洲精品国产精品紫薇| 国产九色porny| 久久久久88色偷偷免费| 在线成年人视频| 欧美va日韩va| 成年永久一区二区三区免费视频| 日本一区免费观看| 人人超在线公开视频| 99re8这里只有精品| 亚洲成在线观看| 丝袜美女写真福利视频| 国产高清在线精品| 日韩免费av片在线观看| 麻豆传媒在线完整视频| 久久这里都是精品| 国产精自产拍久久久久久| 夜鲁夜鲁夜鲁视频在线播放| 国产精一区二区三区| 国产在线观看欧美| 日韩一区二区三区四区| 久久精品一区| www.在线视频| 国产成人av一区二区三区| 亚洲欧洲成人自拍| 国产精品qvod| 日本激情免费| 国产精品男人爽免费视频1| 亚洲一区二区三区三| 久久亚洲成人| 青青草免费在线| 九九九久久久久久| 国产亚洲午夜| 成视频免费在线看| 欧美一区二区三区在线观看 | 97超碰在线视| 亚洲免费成人av| 亚洲国产成人二区| 日韩国产一区久久| 香蕉久久夜色精品国产| 精品国产乱码久久久久久夜甘婷婷| 激情亚洲影院在线观看| 国产精品久久久久福利| 老汉av免费一区二区三区| 成年人黄视频网站| 亚洲精品suv精品一区二区| 欧美18xxxx| 亚洲国产精品日韩| 亚洲一区二区影院| 欧美性xxx| 成人午夜电影在线播放| 国产免费观看久久| 日本三级在线观看网站| 国产福利精品视频| 国产精品性做久久久久久| 小草av在线播放| 欧美精品手机在线| 麻豆国产欧美一区二区三区| 91短视频在线观看| 国产亚洲精品久久久久久777| 888久久久| 日本熟妇人妻中出| 日韩精品一区二区视频| 亚洲香蕉网站| 波多野结衣av在线播放| 欧美激情在线狂野欧美精品| 激情久久五月天| bestiality新另类大全| 91久久国产婷婷一区二区| 中文字幕一区二区三区四区不卡| 中文在线中文资源| 日本成人三级| 精品污污网站免费看| 日韩综合精品| 日日噜噜噜夜夜爽爽狠狠视频| 九九热这里只有精品免费看| 国产精品资源在线观看| 福利在线导航136| 明星裸体视频一区二区| 欧美性xxxx极品高清hd直播| 精品国产一区二区三区| 日本wwwwww| 隔壁老王国产在线精品| 久久一区二区三区四区| 神马久久资源| 久久综合亚洲精品| 日韩高清a**址| 日本va欧美va瓶| 岛国毛片av在线| 综合视频在线观看| 亚洲毛片在线免费观看| 久久国产三级精品| 成人免费网站观看| 水蜜桃亚洲精品| 日韩美女一区二区三区| 国产视频一区三区| 91小视频xxxx网站在线| 国内精品久久国产| 4438x成人网最大色成网站| 国产精品久久国产愉拍| 成人ww免费完整版在线观看| 久久久久久久久久久久久久一区 | 欧美日韩高清不卡| 激情综合视频| 青青青青在线| 日韩欧美视频一区二区三区四区| 精品欧美乱码久久久久久1区2区| 日韩成人伦理电影在线观看| 成人超碰在线| 久久久99精品视频| 久久国产精品久久久久| 欧美国产视频在线| 国产一区二区在线| 欧美色图另类| 日韩精品一区二区三区色偷偷| 亚洲福利视频久久| 99久久综合国产精品| 精品网站aaa| 污黄色在线观看| 欧美视频小说| 亚洲人成欧美中文字幕| 成人小视频在线| **爰片久久毛片| 青柠在线影院观看日本| 国模精品一区二区三区| 国产视频久久网| 久久久精品免费观看| 精品免费在线| 日本高清中文字幕在线| 欧洲高清一区二区| 中文字幕亚洲一区二区三区| 国产精品青草久久| 天天av综合| 2019中文字幕在线电影免费| 99精品人妻少妇一区二区| 欧美中文字幕在线播放| 91成人在线观看喷潮| 国产资源在线一区| 日日狠狠久久偷偷综合色| 激情福利在线| 国产黄色激情视频| 国产精品a久久久久久| 在线播放视频一区| 久久久久国产精品免费免费搜索 | 国内精品小视频| 色综合久久综合网欧美综合网| 美国一区二区三区在线播放 | 小水嫩精品福利视频导航| 日韩高清国产一区在线观看| www.日本久久久久com.| 图片区小说区国产精品视频| 免费精品视频最新在线| 久久超级碰碰| 七七久久电影网| 福利在线白白| 在线观看免费91| 国产精品99久久久久久白浆小说| 欧美一区二区三区视频| 国产精品色婷婷| 在线观看日韩av电影| 欧美精品三级在线| 韩国中文字幕在线| 五月婷婷丁香色| 日韩精品久久久| 日韩av电影免费观看高清| 日韩美女一区二区三区四区| 亚洲欧美aⅴ...| 国产福利精品导航| 欧美亚韩一区| 亚洲电影男人天堂| 日本少妇一区|