天天看點

redis 鍵值對 有效期設定

redis 鍵值對 有效期設定redis中可以使用expire指令設定一個鍵的生存時間,

到時間後redis會自動删除它<-----> 類比于javaweb系統臨時資料 過期删除功能

expire 設定失效時間(機關/秒)

persist 取消失效時間

ttl/pttl(機關為 秒/毫秒) 檢視鍵的剩餘時間 

傳回三種值 -2(健已經不存在了)  -1(表示永久有效)  大于0的數(還有多少有效時間)

pexpire設定失效時間(機關/毫秒)

expireat [key] unix時間戳1351858600

pexpireat [key] unix時間戳(毫秒)1351858700000

應用:

限時的優惠活動: 活動對應資料限時為1小時 則設定為1小時後失效

網站資料緩存(對于一些需要定時更新的資料)

    比如排名,間隔10分鐘做一次統計的話,那麼排名的資料就可以設定 expire

網站訪客通路頻率限制(例如:1分鐘最多通路10次):  使用者ip作為健,預設值為1,incr指令,

set name zm

expire name 60 設定name失效時間為60S

ttl name  檢視name健将要失效的剩餘生存時間

Java代碼  

redis 鍵值對 有效期設定

  1. package bj.zm.redis;  
  2. import org.junit.Test;  
  3. import redis.clients.jedis.Jedis;  
  4. import redis.clients.jedis.Transaction;  
  5. /** 
  6.  * 使用鍵的生存時間來實作控制使用者通路網站的頻率 
  7.  * @author Administrator 
  8.  * 
  9.  */  
  10. public class TestWebSite {  
  11.     Jedis jedis = new Jedis("192.168.1.110", 6379);  
  12.     @Test  
  13.     public void test(){  
  14.         String ip = "192.168.1.1";// 客戶IP  
  15.         website(ip);  
  16.     }  
  17.     //每次遞增1,如果在60S内通路超過了3次 則 通路頻率過高(防止抓取)  模拟的時候 連續執行多次junit來實作列印使用者通路頻率超限的效果  
  18.     private void website(String ip) {  
  19.         String value = jedis.get(ip);  
  20.         if(value==null){  
  21.             Transaction transaction = jedis.multi();  
  22.             transaction.incr(ip);  
  23.             transaction.expire(ip, 60);  
  24.             transaction.exec();  
  25.         }else{  
  26.             int intvalue = Integer.parseInt(value);  
  27.             if(intvalue<=3){  
  28.                 jedis.incr(ip);  
  29.             }else{  
  30.                 System.err.println("使用者通路頻率超限!");  
  31.             }  
  32.         }  
  33. }  

梅花香自古寒來

繼續閱讀