用於解決什么問題呢?舉個例子
1)我們都知道技術都是衍生於問題的。那我們就來說說用來做什么吧。
大家可以想想,當我們的物理服務內存只有8G,但是數據卻有100G,如何慢慢的放在redis中呢?再加上公司近期資金不夠,不能擴展機器怎么辦?
2)解決上述的問題,我們就要引出一個redis的策略,即是標題。
淘汰策略
1)voltile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
2)volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
3)volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
4)allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
5)allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
6)no-enviction(驅逐):禁止驅逐數據
解析
使用淘汰策略是可以把上面的問題暫時頂過去,但是會出現一系列的問題。
1.內存是騰出來了,但是這樣緩存在其中的數據卻出去了,萬一我需要再次調用緩存中的數據又怎么解決?
2.前段時間沒有訪問的,現在火起來了,我的緩存中沒有,一下壓力進入DB怎么辦?
3.使用上面的解決方式,會暴露出問題也是沒辦法的,畢竟魚和熊掌不可兼得。我們得先解決當下的問題不是。上面會總結出一個詞語緩存命中率
什么事緩存命中率?
1)命中率就是緩存里可以查詢到的記錄數除以數據庫里的總記錄數。命中率越低性能越高,反之越差。(大白話就是直接去數據庫查詢而不走緩存,這樣就增大了數據庫的壓力,查詢到數據庫中的值以后再存入緩存中。)
命中率低下的原因也有很多,例如:
1.內存不足,淘汰掉了;
2.緩存服務器宕機;