實現乙個簡單的hash型物件快取管理池

2021-08-30 09:23:23 字數 1702 閱讀 5842

實現的功能:

1. 將物件按唯一的標識id存入快取池(池內部用hashmap 實現);

2. 通過唯一標示id高速讀取池中的物件,如果物件已經失效,返回空;

3. 自動計算物件的訪問時間,使用頻率,使用次數,快取命中次數和訪問次數;

4. 對於使用頻率低,使用次數少,空閒時間長的物件,自動從快取池中刪除;

5. 引數可配置,監視器自己實現,不依賴其他包,功能簡單;

把原始碼包發上來,拋磚引玉哈,希望大家多多批評!

下面的**是初始化和使用方法!

objectcachepooldatacache	= new objectcachepool(

cacheconfig.getintproperty("cache", "maxsize"),

cacheconfig.getintproperty("cache", "minsize")

);//是否自動清理

datacache.setautoclean(commonutils.parseboolean(cacheconfig.getgameproperty("cache", "isautoclean"),true));

//狀態報告間隔

datacache.setstatetimes(cacheconfig.getintproperty("cache", "statetimes"));

//清理工作臨界值

datacache.setcriticalsize(cacheconfig.getintproperty("cache", "criticalsize"));

//最大清除數量

datacache.setmaxcleansize(cacheconfig.getintproperty("cache", "maxcleansize"));

//最大允許空閒時間 大於此值,將被列入清除範圍

datacache.setmaxfreetime(cacheconfig.getintproperty("cache", "maxfreetime"));

//最小允許訪問率 小於此值,將被列入清除範圍

datacache.setminaccfrq(cacheconfig.getdoubleproperty("cache", "minaccfrq"));

//最小允許訪問次數 小於此值,將被列入清除範圍

datacache.setminaccnum(cacheconfig.getintproperty("cache", "minaccnum"));

//設定快取監視器

datacache.setmonitor(new cachemonitor());

datacache.startmonitor();

一些引數的意義如下:

statetimes 狀態資訊輸出間隔時間

isautoclean 是否自動清理

maxsize 最大允許容量

minsize 最小容量

criticalsize 清理臨界點,快取達到此值後清理工作開始執行

maxcleansize 每次清理數量 每次清理工作從快取中清除出局的數量達到此值後清理工作停止

maxfreetime 最大空閒時間,大於此空閒時間的物件將被列入被清理的範圍 秒

minaccfrq 物件的最小訪問平率,小於此值的物件將被列入被清理的範圍 次/小時

minaccnum 物件允許的最小訪問次數,小於此值的物件將被列入被清理範圍 次

乙個簡單的物件池

在伺服器的的執行過程中,由於大量的計算會導致某些物件頻繁地分配和釋放,久而久之就會產生大量的記憶體碎片,從而影響伺服器的效率和穩定。本文通過實現乙個輕量級的物件池重用物件來解決這個問題。include include mutex.h define min increasize 30 每次最少分配30...

乙個簡單的物件池

從書上直接摘抄下來的物件池,以後別給忘了 template class objectpool template objectpool objectpool int chunksize throw std invalid argument,std bad alloc mchunksize chunks...

乙個簡單的Matrix實現

我們直接來看 吧 matrix.h pragma once include using namespace std 矩陣類 class matrix 下面是實現和測試的 matrix.cpp include matrix.h include include matrix matrix void ma...