精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

內存不夠用還要速度快,終于找到可以基于 File 的 Cache 了

開發 前端
既然開源社區沒什么好的東西,看來只能自己封裝一下了,像 ehcache 那種高階的 diskcache 搞不定,用簡單的 sqlite 作為本機的 diskcahe 還是可以的,接下來試試看。

一、背景

1. 講故事

18年的時候在做純內存項目的過程中遇到了這么一個問題,因為一些核心數據都是飄在內存中,所以內存空間對我們來說額外寶貴,但偏偏項目中有些數據需要緩存,比如說需要下鉆的報表上的點,基于性能的考慮,不希望采用獨立的緩存中間件,比如 redis, mongodb,畢竟再怎么滴還是要走網絡io,但直接放在本機內存中也不現實,那有沒有均衡于 native cache 和 cache server 之間的方案呢?對的,就是 disk cache,畢竟 磁盤IO 的讀寫要遠大于網絡IO,更何況配的是 SSD 呢。

二、尋找解決方案

1. 檢索 github

有了 disk cache 這個大方向就可以去 github 上檢索關鍵詞,看看有沒有類似的中間件,說實話,java的倒不少,比如著名的 guava,ehcache,不僅有cache的簡單操作,還附帶各種統計信息,刷新了對緩存認知的三觀哈,尤其是 ehcache 太????了,堆內,堆外,磁盤,分布式通通支持,用 C# 寫的好不容易找到一個 disk cache 還不幸是收費的,氣人哈,用 C# 調用 Java 肯定不現實了哈。

2. 使用sqlite作為 disk cache

既然開源社區沒什么好的東西,看來只能自己封裝一下了,像 ehcache 那種高階的 diskcache 搞不定,用簡單的 sqlite 作為本機的 diskcahe 還是可以的,接下來試試看。

class DiskCache
    {
        private static readonly string dbFile = $@"{Environment.CurrentDirectory}\mysqlite1.db";
        private static readonly string connectionString = $@"Data Source={dbFile};Version=3";

        //過期數據監測:【一分鐘來一次】
        private static Timer timer = new Timer((arg) =>
        {

        }, null, 1000, 1000 * 60);

        static DiskCache()
        {
            if (!File.Exists(dbFile))
            {
                var schema = @"CREATE TABLE Cache (
                                                  cachekey   VARCHAR (1000) PRIMARY KEY  NOT NULL,
                                                  cachevalue TEXT                        NOT NULL,
                                                  created    DATE                        NOT NULL,
                                                  expried    DATE                        NOT NULL
                                              );";

                using (SQLiteConnection connection = new SQLiteConnection(connectionString))
                {
                    connection.Execute(schema);
                }
            }
        }

        public static void Set<T>(string key, T value, int expiredMinutes)
        {
            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
            {
                var sql = $"delete from Cache where cachekey =@key;" +
                          $"insert into Cache(cachekey,cachevalue,created,expried) values (@cachekey,@cachevalue,@created,@expried)";

                connection.Execute(sql, new
                {
                    key = key,
                    cachekey = key,
                    cachevalue = Newtonsoft.Json.JsonConvert.SerializeObject(value),
                    created = DateTime.Now,
                    expried = DateTime.Now.AddMinutes(expiredMinutes)
                });
            }
        }

        public static T Get<T>(string key)
        {
            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
            {
                var sql = $"select cachevalue from Cache where cachekey=@cachekey and expried > @expried";

                var query = connection.QueryFirstOrDefault(sql, new { cachekey = key, expried = DateTime.Now });

                var json = JsonConvert.DeserializeObject<T>(query.cachevalue);

                return json;
            }
        }
    }

這里有二個注意點:

  • 因為是做緩存,所以數據庫和表的創建都要通過程序自動化,數據庫是否存在判斷 file 文件是否存在即可。
  • 過期數據的問題,因為我有 expried 字段,這一點可以學習GC思想,使用 Timer 在后臺定期清理。

有了這些基礎之后,原子化的緩存就實現好了,接下來試一下基本的 Get / Set 方法。

圖片圖片

這個方案很好的節省了我寶貴的內存,同時速度又是 networkio 和 native 之間的一個平衡,算是個不錯的解決辦法吧。

三、aspnetcore 的 EasyCaching

EasyCaching 是園子里 @Catcher Wong 的作品 [https://www.cnblogs.com/catcher1994/p/10806607.html],點贊~~~ 看了下提供了很多種 provider,如下圖:

圖片圖片

我想后面肯定還會有更多的 provider 出現,如:leveldb,Cassandra,接下來看看這玩意怎么玩。

1. 安裝使用

在 nuget 上 搜一下 EasyCaching.SQLite 安裝即可,接下來就是使用文檔:https://easycaching.readthedocs.io/en/latest/SQLite/#2-config-in-startup-class 如下圖:

圖片圖片

文檔中是采用依賴注入的方式,而我的程序是 console 模式的后端服務,并沒有 ServiceCollection,先模擬著試試看。

static void Main(string[] args)
        {
            IServiceCollection services = new ServiceCollection();

            services.AddEasyCaching(option =>
            {
                option.UseSQLite(c =>
                 {
                     c.DBConfig = new SQLiteDBOptions
                     {
                         FileName = "demo.db",
                         CacheMode = SqliteCacheMode.Default,
                         OpenMode = SqliteOpenMode.ReadWriteCreate,
                     };
                 }, "m1");
            });

            IServiceProvider serviceProvider = services.BuildServiceProvider();

            var factory = serviceProvider.GetService<IEasyCachingProviderFactory>();

            var cache = factory.GetCachingProvider("m1");

            cache.Set("user", "hello world!", TimeSpan.FromSeconds(20));

            var info = cache.Get<string>("user");

            Console.WriteLine(info);
        }

圖片圖片

接下來用 SQLiteStudio 打開 demo.db 看一下數據呈現,如下圖:

圖片圖片

可以看到人家的框架比我的多了一個 name 字段,看樣子是給 多個 cache 做隔離用的,不過這里貌似有三個需要優化的地方。

  • 并不是每一個程序都要使用 依賴注入 的方式 ,提供更便捷的方式初始化就更好了。
  • 看了下源碼,并沒有找到可以定期刪除過期數據的業務邏輯。
  • 建議提供一些 cache 的統計信息,如命中次數,某一個key最后命中時間等等時分統計圖。
責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2021-03-15 23:11:12

內存虛擬化技術

2013-06-14 13:27:36

內存Linux交換分區

2015-07-16 15:16:41

內存泄露解決辦法

2019-11-15 10:41:10

Vim分屏終端

2023-05-17 07:28:18

電腦16GB內存

2013-05-02 09:16:16

程序員

2013-12-19 10:08:52

AWS服務器

2019-07-24 14:05:17

Redis內存集群

2024-07-25 12:33:45

2016-11-25 15:03:33

FacebookWIFI

2019-07-25 15:23:05

Redis電腦數據庫

2018-11-22 14:34:01

局域網IP擴容

2013-10-23 14:28:30

2017-03-23 11:24:26

Windows 10Windows系統盤

2021-08-08 08:17:45

事件響應日志網絡安全

2022-12-15 18:20:46

ClickHouse存儲引擎

2018-03-15 10:12:36

霧計算云計算物聯網

2020-11-12 07:47:18

程序員管理時間

2018-09-18 14:43:30

HBase查詢數據
點贊
收藏

51CTO技術棧公眾號

日本中文字幕视频在线| 人人妻人人爽人人澡人人精品 | 欧美一区三区| 在线电影国产精品| aa视频在线播放| 成人av毛片| 丁香亚洲综合激情啪啪综合| 欧日韩在线观看| 午夜爱爱毛片xxxx视频免费看| aaa国产精品视频| 欧美色视频在线观看| 国产高清www| 视频一区二区三区不卡| 99久久婷婷国产综合精品| 国产精品免费一区二区三区都可以 | 精品视频91| 在线视频你懂得一区二区三区| 日本高清xxxx| chinese偷拍一区二区三区| 国产91丝袜在线播放九色| 国产精品免费一区豆花| av黄色在线播放| 欧美精品18| 日韩亚洲综合在线| 在线 丝袜 欧美 日韩 制服| 亚洲精品一区在线| 欧美精选午夜久久久乱码6080| 欧美日韩一道本| 男男gaygays亚洲| 中文字幕字幕中文在线中不卡视频| 精品一区二区三区国产| 午夜精品久久久久久久第一页按摩| 日韩av成人高清| 欧美亚洲一级片| 久久国产免费观看| 日韩中字在线| 国产亚洲xxx| 国产成人无码一区二区在线观看 | 日韩电影一区二区三区| 97超碰国产精品女人人人爽 | 久久国产精品毛片| 97视频在线观看免费| 精国产品一区二区三区a片| 久久精品亚洲人成影院| 久久精品影视伊人网| 日本午夜精品视频| 日韩在线观看电影完整版高清免费悬疑悬疑| 亚洲美女性视频| 亚洲成人日韩在线| 综合亚洲自拍| 亚洲人成网在线播放| 在线免费观看成年人视频| 任你弄精品视频免费观看| 亚洲国产精品久久久| 第四色在线视频| 欧美日韩导航| 亚洲精品99久久久久| 日本一区二区三区网站| 最新国产一区| 最近中文字幕mv在线一区二区三区四区 | 久久久久久亚洲精品美女| 91精品国产综合久久香蕉的特点 | 9久草视频在线视频精品| 激情视频一区二区| 欧美色图另类| 亚洲国产精品av| 国产日韩视频在线播放| 色呦呦视频在线观看| 午夜精品久久久久久久久久久| 996这里只有精品| 少妇在线看www| 欧美中文字幕一区二区三区| 污视频网站观看| 国内不卡的一区二区三区中文字幕 | 国产九九热视频| 国产一区二区高清在线| 亚洲第一区中文字幕| 精品人妻一区二区三区视频| 成人综合久久| 久久97久久97精品免视看| 国产午夜精品无码一区二区| 小嫩嫩精品导航| 国产免费一区视频观看免费 | 国产又粗又猛又爽| 成人av在线影院| 欧美一区二区三区在线播放 | 欧美丝袜激情| 九九久久久久久久久激情| 欧美日韩精品区| 青青草91视频| 国产区二精品视| 爱久久·www| 亚洲午夜免费福利视频| 国产成人无码av在线播放dvd| 午夜不卡一区| 亚洲精品一区中文字幕乱码| 婷婷激情四射网| 国产精品毛片在线看| 成人h视频在线| 三级视频网站在线| 亚洲少妇中出一区| 农村妇女精品一二区| 麻豆国产一区| 一区二区三区天堂av| 精品无码人妻一区二区三区品| 日韩电影一区二区三区| 精品一卡二卡三卡四卡日本乱码| 欧美一级二级三级区| 欧美日韩美女在线| 亚洲国产欧美日韩在线| 欧美日韩国产高清电影| 97激碰免费视频| 国产孕妇孕交大片孕| 久久久久久久久久看片| 国产成人一区二区三区别| 欧美黑粗硬大| 亚洲精品自在久久| 国产精品成人av久久| 精品无码三级在线观看视频| 欧美日韩亚洲一区二区三区四区| 四虎影视国产在线视频| 欧美片在线播放| 久久成人激情视频| 国产欧美三级| 国产亚洲精品自在久久| 丝袜在线视频| 欧美一区二区三区公司| 91禁男男在线观看| 日韩和欧美一区二区三区| 久久偷看各类wc女厕嘘嘘偷窃| 9191在线播放| 3d动漫精品啪啪1区2区免费 | 亚洲二区视频在线| 一级黄色大片免费看| 欧美+亚洲+精品+三区| 国产欧美日韩精品在线观看 | 欧美高清videos高潮hd| 国产麻豆一精品一男同| 综合久久综合久久| 污污视频网站在线| 亚洲免费二区| 91在线视频导航| 国产在线高清理伦片a| 欧美精品在线视频| 小向美奈子av| 狠狠网亚洲精品| 特级黄色录像片| 日本一区二区乱| 欧美激情啊啊啊| 黄色小视频免费在线观看| 亚洲国产裸拍裸体视频在线观看乱了| 久草福利在线观看| 亚洲第一区色| 欧美日韩在线精品| 国产精品99| 按摩亚洲人久久| 国内老熟妇对白hdxxxx| 一区二区三区日韩欧美| 男女性杂交内射妇女bbwxz| 狠狠综合久久| 精品一区二区不卡| 成人午夜精品| 久久影院在线观看| 国产黄色一级大片| 激情成人中文字幕| xxxx日本黄色| 激情六月婷婷综合| 大西瓜av在线| 伊人久久大香线蕉| 国产欧美久久一区二区| 欧美黄色视屏| 亚洲女在线观看| 91久久国语露脸精品国产高跟| 最新国产成人在线观看| 在线观看亚洲免费视频| 免费亚洲视频| 色乱码一区二区三区熟女| jizz性欧美23| 国产精品福利在线| 国产三级在线播放| 日韩成人在线观看| 中文字幕一区二区三区人妻四季| 亚洲欧美另类综合偷拍| 亚洲av无码一区二区三区网址| 久久福利毛片| 天天做天天躁天天躁| 最新亚洲精品| 99在线观看视频网站| 韩国主播福利视频一区二区三区| 日韩中文字幕精品视频| 熟妇高潮一区二区三区| 欧美日韩国产小视频| 五月天婷婷综合网| 国产精品久久久久三级| 老熟妇精品一区二区三区| 蓝色福利精品导航| 自慰无码一区二区三区| 91精品综合| 日本不卡在线观看| 亚洲成av人片在线观看www| 国产成人97精品免费看片| 三级资源在线| 日韩午夜在线视频| 国产精品国产高清国产| 91精品国产综合久久福利软件| www.国产com| 亚洲最大色网站| 成人精品一二三区| 91麻豆123| 亚洲av成人无码一二三在线观看| 久久超碰97人人做人人爱| 日韩精品视频久久| 亚洲大胆av| 麻豆映画在线观看| 色一区二区三区四区| 欧美午夜免费| 日韩高清成人在线| 不卡视频一区| 午夜视频一区二区在线观看| 国产精品视频99| 婷婷综合六月| 欧美在线激情网| 国产美女高潮在线观看| 色综合91久久精品中文字幕| 九七久久人人| 日韩三级影视基地| 永久av在线| 在线视频日本亚洲性| 日本精品专区| 日韩精品一二三四区| 色哟哟国产精品色哟哟| 精品久久久三级丝袜| 国产成人精品一区二三区四区五区| 亚洲欧美网站| 在线观看欧美精品| 天天爽天天爽天天爽| 久久精品一区二区| 亚洲国产av一区| 久久奇米777| 37p粉嫩大胆色噜噜噜| 99国产精品久久久| 色天使在线视频| 久久婷婷国产综合精品青草| 最近中文字幕无免费| 91在线视频官网| 久久福利小视频| 99久久久无码国产精品| 亚洲av无码一区二区三区网址| av电影天堂一区二区在线| 小毛片在线观看| 91丨九色丨黑人外教| 精品人妻无码一区二区三区| 久久日一线二线三线suv| 色一情一交一乱一区二区三区| 久久久精品日韩欧美| 蜜乳av中文字幕| 91免费观看视频| 蜜桃传媒一区二区亚洲| 国产欧美日韩精品在线| 网站永久看片免费| 亚洲欧美偷拍卡通变态| 久久99久久久| 欧美日韩免费区域视频在线观看| 日本道在线观看| 欧美在线看片a免费观看| 最近国语视频在线观看免费播放| 欧美日韩精品二区第二页| 国产又黄又爽视频| 日韩精品一区二区三区视频播放| 亚洲男女视频在线观看| 日韩精品在线观看一区| 中国日本在线视频中文字幕| 久久视频在线观看免费| mm视频在线视频| 国产精品成人免费视频| 亚洲精品777| 国产91免费视频| 国产欧美日韩免费观看| 中文字幕一区二区三区四区五区人 | 免费看黄色的视频| 中日韩免费视频中文字幕| 午夜激情福利网| 激情成人中文字幕| 亚洲字幕av一区二区三区四区| 欧美一区午夜精品| 爽爽视频在线观看| 播播国产欧美激情| а√在线中文在线新版| 国产精品久久久久久搜索| 色妞ww精品视频7777| 欧美精品在线一区| 在线中文一区| 国产视频一区二区三区在线播放| 久久99在线观看| 五十路六十路七十路熟婆 | 四虎一区二区| 欧美日韩国产探花| 国产欧美高清在线| 丁香六月综合激情| 国产白丝一区二区三区| 亚洲国产一区二区在线播放| 欧美 亚洲 另类 激情 另类| 精品精品国产高清a毛片牛牛| 成人高清网站| 88国产精品欧美一区二区三区| 日本免费成人| 日本视频一区在线观看| 欧美日一区二区在线观看 | 成人丝袜高跟foot| 91香蕉国产视频| 色综合一个色综合亚洲| 成人午夜视频一区二区播放| 色婷婷**av毛片一区| 午夜精品久久久久久久久久蜜桃| 亚洲字幕一区二区| 日本一区二区三区视频| 一本大道熟女人妻中文字幕在线| 国产一区二区三区免费观看| 亚洲AV无码成人精品区明星换面| 亚州成人在线电影| 亚洲精品字幕在线| 日韩中文字幕网| 国产成人精品一区二区三区视频 | 成人在线视频成人| 欧美自拍视频在线| 开心激情综合| www.亚洲成人网| 国产成人精品三级| 青青草原在线免费观看| 欧美美女直播网站| 淫片在线观看| 成人亲热视频网站| 91日韩在线| 手机av在线网| 中文字幕一区二区三区不卡在线| 无码人妻精品一区二区50| 日韩精品中文字幕久久臀| 成人黄色动漫| 国产一区二区精品免费| 在线成人欧美| 国产+高潮+白浆+无码| 亚洲国产中文字幕| 色综合视频在线| 97超级碰在线看视频免费在线看| 久久动漫网址| 国产亚洲精品网站| 久久久国际精品| 成人一级免费视频| 在线观看免费高清视频97| 成人国产精品一区二区免费麻豆| 日本在线一区| 看电视剧不卡顿的网站| 人人干在线观看| 日韩欧美一级精品久久| 日本在线视频www鲁啊鲁| 古典武侠综合av第一页| av不卡在线看| 亚洲区自拍偷拍| 欧美日韩成人综合天天影院| 91国内在线| 国产一级特黄a大片99| 久久激情视频| 蜜臀久久99精品久久久久久| 欧美日韩一区不卡| av网站免费在线观看| 国产精品99久久久久久久| 亚洲人成人一区二区三区| 欧美18—19性高清hd4k| 欧美日韩国产bt| 女人天堂av在线播放| 欧美日韩在线观看一区| 美女视频一区二区三区| 在线观看成人毛片| 亚洲国产日韩欧美在线99| 成人激情综合| 免费看污污视频| 99re视频精品| 在线免费观看日韩视频| 欧美俄罗斯性视频| 国产免费久久| 日本少妇一级片| 色综合咪咪久久| 巨大荫蒂视频欧美大片| 精品视频第一区| 青青青伊人色综合久久| 精品无码人妻一区二区三区品| 亚洲欧美日韩国产中文专区| 99re8精品视频在线观看| 五十路熟女丰满大屁股| 国产精品久久久久久久浪潮网站| 不卡的日韩av| 国产精品色婷婷视频| 伊人成人在线| 成人三级视频在线观看| 亚洲精品久久视频| 国产精品成人3p一区二区三区| 妞干网在线视频观看| 亚洲欧美国产三级| 精品欧美不卡一区二区在线观看| 91久久久久久久|