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
版權宣告:本文為博主原創文章,轉載請附上博文連結!