為瞭解決大量數據緩存,消耗記憶體過多的問題,特別實現了文件緩存;該緩存主要是應用於多存少讀的情況,一般我們做緩存是實現將數據放在記憶體中或者資料庫中;放在記憶體中就會消耗很大記憶體,尤其在高併發大數據緩存時,更容易造成記憶體溢出,資料庫在很大程度能夠滿足我們需求,但是在極端情況,每秒產生很大數據時,資料庫速度 ...
為瞭解決大量數據緩存,消耗記憶體過多的問題,特別實現了文件緩存;該緩存主要是應用於多存少讀的情況,一般我們做緩存是實現將數據放在記憶體中或者資料庫中;放在記憶體中就會消耗很大記憶體,尤其在高併發大數據緩存時,更容易造成記憶體溢出,資料庫在很大程度能夠滿足我們需求,但是在極端情況,每秒產生很大數據時,資料庫速度就是問題;
基於記憶體和資料庫原因,測試將數據直接放在文件中,是很快的,一般的機械硬碟30-45M/s,一次寫入速度很快;
整個緩存過程:提高介面,數據緩存50M左右,將數據寫入特定的DB文件中,每次10M寫入,這樣做只是為了平衡硬碟寫入,防止影響其它寫入;
緩存將數據byte位元組(value值寫入DB文件),同時形成數據索引將位置放在在索引文件中(csv文件),保存key對應的數據文件名稱,對應文件中的位置;每20000個key形成一個文件,再次把該索引文件名稱及生產時間寫入一個全局索引文件中;
在緩存中需要設置key的緩存個數和緩存時間,預設大小是long的最大值,時間是30分鐘(因為我的需要設置);後臺現場會在一定環境下啟動線程,刪除索引文件和DB文件,主要是按照時間,key個數,文件大小來決定啟動;
重新讀取值時,先檢索全局索引,從後往前讀取,或者最新生成的數據索引文件,索引文件都分割的很小,所以一次讀入到記憶體,查找key,找到對應的數據位置,在讀取具體的值;
整個控制並不是100%精確,這是我的需要,如果做精確控制,則要添加很多同步控制,這樣會降低性能和速度,但是也不會影響一般需求使用,肯定比其它方式快;
測試工作已經完成了,是我沒有想到是,剛剛開始做的時候覺得應該簡單,但是在完成時還是花了很多時間;
一開始的緩存,也是使用了資料庫,或者存儲用文件索引用文件,最後改成了全部用文件。程式就在在於摸索吧。
程式同步到git和csdn,歡迎大家一起寫“廢代碼”;
數據大小都是按照硬碟30M/s,一般cpu配置寫的,如果沒有把握不要亂改