1. 程式人生 > 其它 >為什麼redis單執行緒模型會效率高

為什麼redis單執行緒模型會效率高

  一:redis中資料為什麼會丟失?

    redis是緩衝用的並不是資料庫,快取的資料會過期的,另外也可能是被設定了過期時間,redis自己給幹掉了

  

  二:資料都過期了為什麼還佔這記憶體呢?

    如:在redis中設定了過期時間,到期之後我們查資料會出現查不到資料但是還佔記憶體的情況。

    其實它內部是  定期刪除和惰性刪除兩個在起作用。

    定期刪除指:redis每隔100ms隨機抽取一些key來檢查和刪除。如果全部檢查cpu消耗會很多,可能會宕機。

    惰性刪除:定期刪除中過期的key沒有被刪除的,當某個key被使用的時候redis會檢查一下是否過期,如果過期了則不會返回任何東西。

   三:如果定期刪除沒刪除的惰性刪除也沒檢查到的過期資料怎麼辦呢?

    走記憶體淘汰機制

  四:redis記憶體淘汰機制

    如果redis的記憶體佔用過多的時候,此時會進行記憶體淘汰,有如下一些策略:

      redis 10個key,現在已經滿了,redis需要刪除掉5個key

      1個key,最近1分鐘被查詢了100次

      1個key,最近10分鐘被查詢了50次

      1個key,最近1個小時倍查詢了1次

    

    1)noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯,這個一般沒人用吧,實在是太噁心了

    2)allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key(這個是最常用的)

    3)allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key,這個一般沒人用吧,為啥要隨機,肯定是把最近最少使用的key給幹掉啊

    4)volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key(這個一般不太合適)

    5)volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key

    6)volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移除

               其實,你寫的資料太多,記憶體滿了,或者觸發了什麼條件,redis lru,自動給你清理掉了一些最近很少使用的資料