c#本地緩存實現


用了一段時間java,java實現服務端程序很簡單,有很多公共開源的組件或者軟件。但是c#的很少。

  現在准備自己寫點東西,學習下新的東西,總結下c#的內容以及我們經常用的內容,抽離成類,組件,模型。方便在開發時能夠有個方向和參考。同時也方便設計,充分運用拿來主義,實現功能組合。

    本篇是前面幾篇之后的續篇。前已經提到了關於緩存的例子。最簡單的一種,就是開辟一個集合,放置數據,提供添加和獲取的接口。我喜歡用stack和時間來計算平衡,這種應用是最簡單的。后面一篇整理了網上的代碼LRU實現的緩存,還是可以在很多場景下用的,每一個添加都操作,再最大值移除時很方便。

  最近在網上找了很久,都沒有發現c#實現的本地緩存的組件但是java有很多。所以花了幾天時間,自己做了一個K-V緩存,可以用,也可以修改,畢竟一個人的能力是有限的,java的很多本地緩存都是公司開發出來的。我提供了一個緩存的接口,一個排序比較接口以及創建緩存的工廠。

簡單列舉下,代碼中有相信注釋。

1.CacheConfig 緩存配置類,配置緩存時間,大小,移除策略等

2.ICache 緩存接口

3. JYCache 緩存實現類

4.CacheFactory 緩存創建類

5.IPolicyCompare 緩存比較器,用於策略消失時比較排序,選擇要消失的緩存

策略:FIFO,LRU,LFU代碼中已經實現。

這里有一個優化,就是LRU,如果允許使用很多內存空間,則在操作時會記錄操作的先后順序,類似網上的LRU實現。

如果不允許,則在觸發消失時會去按照比較器排序,然后移除,這樣有一個比較的過程,會慢。

關於比較器,這個我考慮了很久,原本是想讓外部能夠自定義。所以我抽取了一個接口,外部實現了以后就按照比較器消失。但是完成以后發現還是要改代碼,因為在緩存的包裝器中,我只是記錄了緩存寫入時間,服務時間以及服務次數,是按照FIFO,LRU,LFU策略來實現的。自定義的話我不知道要記錄哪些操作,所以如果你需要,需要自己增加記錄,在緩存實現的添加和獲取2個方法中增加。然后實現比較接口。我已經在對外的實體中增加了一個custom字段用於擴展比較策略。

項目地址:

https://github.com/jinyuttt/JYCache.git
---------------------
作者:jason成都
來源:CSDN
原文:https://blog.csdn.net/jinyuttt/article/details/83822676
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM