Memcached之惰性刪除機制

2021-09-03 01:53:58 字數 728 閱讀 6949

memcached只是作為快取,它的大小是有限制的,因此memcached的chunk中存放的內容要進行動態的更新,這就涉及到快取資料的淘汰

快取淘汰的策略有兩種: (1) 定時去清理過期的快取。 (2)當有使用者請求過來時,再判斷這個請求所用到的快取是否過期,過期的話就去底層系統得到新資料並更新快取。

分析:兩者各有優劣,第一種的缺點是維護大量快取的key是比較麻煩的,並且需要定時去檢測快取資料是否過期;第二種實現方案就是只有每次使用者請求過來時才判斷快取是否失效,邏輯相對比較複雜。

優點:節省了cpu每隔幾秒鐘檢查值是否過期帶來的時間開銷

當某個值過期之後,並沒有從記憶體刪除,因此stats統計時,cur_item有其資訊

當get其值時,先判斷得知已經過期,返回空並且將該值從記憶體刪除

如果之前沒有get過該值,將不會自動刪除,cur_item一直不變

當有乙個新值去占用該值的位置時,則將新值直接替換該過期值的位置

總結:當且僅當 get過期值 或者 新值替換過期值時,才會真正的將過期值從記憶體中刪除

lru:最近最少使用

舉例:如果112byte的chunk全部使用完畢,那麼100byte的資料將存放在**?

答案:當某個單元被請求時,維護乙個計數器,通過計數器來判斷最近誰最少被使用就把誰踢除。

注:即使某個key是設定的永久有效期,由於使用的lru演算法,當該key是最近最少使用的項時,它也將被踢出來。

Django QuerySet快取和惰性機制

惰性機制 在內部。queryset在構造,過濾,切片,傳遞的時候通常查詢集不會真正的去資料庫查詢 那它會在什麼情況下去資料庫查詢呢?1.迭代 通過迴圈將值乙個個拿出來 2.切片,使用切片語法的step 步長切片 引數,或者是切片只切出乙個元素的時候,django將執行資料庫查詢,3.直接在控制台列印...

RabbitMQ之惰性佇列(Lazy Queue)

rabbitmq從3.6.0版本開始引入了惰性佇列 lazy queue 的概念。惰性佇列會盡可能的將訊息存入磁碟中,而在消費者消費到相應的訊息時才會被載入到記憶體中,它的乙個重要的設計目標是能夠支援更長的佇列,即支援更多的訊息儲存。當消費者由於各種各樣的原因 比如消費者下線 宕機亦或者是由於維護而...

Scala之惰性函式(二)

基礎概念 當val被宣告為lazy時,它的初始化將會被推遲 直到我們首次對此進行取值時,函式才會執行,這種函式我們稱之為惰性函式。案例使用object lazydemo01 def sum n1 int,n2 int int 列印 在res沒有輸出的時候,sum函式是不會執行的 在進行取值時,sum...