時間快取容器TimeCacheMap的實現

2021-06-16 13:38:41 字數 944 閱讀 1249

storm中實現了乙個容器,它裡面的元素存一定時間,超過該時間的元素便可能被刪除,以保證容器可以加入更多新容器。

實現思想:初始化n個容器,n個容器組成鍊錶,元素的最短儲存時間為t,每次將新元素插入到鍊錶頭部的容器內,每隔t/(n-1)時間,將鍊錶尾部的容器刪除,同時在鍊錶頭部插入新容器,每次刪除在n個容器中分別執行刪除操作。可以每個元素的儲存時間為:[t, t + t/(n-1)]

在具體實現中作者採用乙個執行緒進行容器佇列的頭部插入和尾部刪除工作,同時使用鎖機制避免常規容器操作和容器佇列的刪除與新增操作的訪問衝突。

code:

private

finalobject _lock=newobject();

privatethread _cleaner;

privateexpiredcallback _callback;

final

longexpirationmillis = expirationsecs * 1000l;

final

longsleeptime = expirationmillis / (numbuckets-1);

_cleaner =newthread(newrunnable()

if(_callback!=null) }}

}catch(interruptedexception ex)

}});

_cleaner.setdaemon(true);

_cleaner.start();

高效的記憶體區塊快取容器

下面的快取實現主要應用於儲存最新區塊,假定產生的塊是連續的,我們需要把塊存起來,從而提高取資料的效率,快取的容器大小為100,大小可以調整,當快取滿了,後面的塊需要替換最早的區塊,從而達到容器存的最新的塊。下面是技術實現 package main import container list erro...

docker下redis容器清理快取

1 登入至指定埠的redis服務 redis cli h 127.0.0.1 p 6379 其中,127.0.0.1可以寫成伺服器的ip位址,6379為埠號。注意 如果redis設定的有密碼要用 redis cli h 127.0.0.1 p 6379 a redis 不然執行下一步 keys 會報...

Docker容器 如何修改容器時間,時區問題修改

在進行操作的時候,我們先確定下時間錯誤是什麼引起的,是時間錯誤,還是時區問題 如果只是單純的時間異常,可以直接使用docker exec it u root 24795ac94ae7 bin sh 進入自己的容器進行修改就行了 注 要加 u root 不然許可權會不足,會提示permission d...