redis鍵的過時和內存淘汰策略

鍵的過時時間

設置過時時間

Redis能夠爲存儲在數據庫中的值設置過時時間,做爲一個緩存數據庫,這個特性是頗有幫助的。咱們項目中的token或其餘登陸信息,尤爲是短信驗證碼都是有時間限制的。redis

按照傳統的方法都是項目自己判斷過時,這樣無疑影響了系統性能。數據庫

redis能夠爲set或者expire兩種方式爲鍵設置過時時間緩存

 1         Jedis jedis = new Jedis("localhost");
 2         //nxxx:nx是不存在是才set,xx是存在時才set
 3         //expx:EX是秒,PX是毫秒
 4         jedis.set("key","value","XX","PX",1000);
 5         Thread.sleep(2000);
 6         String value = jedis.get("key");
 7         if(value==null||"".equals(value)){
 8             System.out.println("已過時");
 9         }else{
10             System.out.println(value);
11         }
12         jedis.set("key","value");
13         jedis.expire("key",10000);
14         value = jedis.get("key");
15         if(value==null||"".equals(value)){
16             System.out.println("已過時");
17         }else{
18             System.out.println(value);
19         }

輸出結果dom

 

刪除過時鍵

爲一個鍵設置了過時時間爲一個小時,那麼一個小時以後如何處理這個鍵呢?有兩種方式:按期刪除和惰性刪除性能

按期刪除:每隔必定的時間就在設置了過時時間的鍵裏面隨機挑選一些刪除spa

惰性刪除:已通過期了的鍵值沒有在按期刪除裏被刪掉,除非系統用get去查那個key纔會被刪除code

由此咱們能夠看到若是按期刪除留下了不少過時的key,又沒有及時去查讓惰性刪除發揮做用,就會在redis內存中佔用大量空間,致使redis內存塊被耗盡。blog

爲了解決這個問題,redis提供了內存淘汰策略token

 

內存淘汰策略

 

redis提供了6種內存淘汰策略內存

一、voilate-lru:在設置了過時時間的數據裏面挑選最近最少被使用的刪除

二、voilate-ttl:在設置了過時時間的數據裏面挑選將要過時的刪除

三、voilate-random:在設置了過時時間的數據裏面隨機挑選一些刪除

四、allkeys-lru:在全部數據裏面挑選最近最少被使用的刪除

五、allkeys-random:在全部數據裏面隨機挑選一些刪除

六、no-eviction:禁止驅逐數據,不容許新數據插入

4.0版本以後增長了兩種

七、violate-lfu:在設置了過時時間的數據裏面挑選最不常使用的刪除

八、allkeys-lfu:在全部數據裏面挑選最不常使用的刪除

 

 

 

相關文章
相關標籤/搜索