【redis中鍵的生存時間(expire) 】


1、redis中可以使用expire命令設置一個鍵的生存時間,到時間后redis會自動刪除它
     expire      設置生存時間(單位/秒)
     pexpire    設置生存時間(單位/毫秒)
     ttl/pttl     查看鍵的剩余生存時間
     persist     取消生存時間
     expireat [key] unix時間戳1351858600
     pexpireat [key] unix時間戳(毫秒)1351858700000
2、應用場景
     限時的優惠活動
     網站數據緩存(對於一些需要定時更新的數據)
     限制網站訪客訪問頻率(例如:1分鍾最多訪問10次)

 

    /** 
         * 限制網站訪客訪問頻率(例如:1分鍾最多訪問10次),其中: 訪客通過IP標識,即同一個IP在1分鍾內僅能訪問10次 
         */  
        @Test  
        public void test4(){  
              final String ip = "127.0.0.1" ;  
             Jedis redis = null;  
              //模擬同一個用戶連續訪問20次  
              for(int i =0;i <20;i ++){  
                  boolean t = validate(ip);  
                  if(t ){  
                     System. out.println("恭喜你,購票成功!" +i );  
                 } else{  
                      //獲取當前ip過期時間  
                      redis = getRedis();  
                      break;  
                 }  
             }  
              while(true &&redis.ttl(ip)>0){  
                 System. out.println("抱歉,你訪問過度頻繁,請" +redis .ttl(ip )+"秒后再來訪問!" );  
                  try {  
                     Thread. sleep(1000);  
                 } catch (InterruptedException e ) {  
                      e.printStackTrace();  
                 }  
             }  
             System. out.println("你可以再次訪問了" );  
        }  
      
        /** 
         * 
         * @param ip 
         * @return  true: 可以訪問,false: 表示已經達到最大上線 
         */  
        public boolean validate( String ip ) {  
             Jedis jedis = getRedis();  
             String value = jedis.get( ip);  
              if(value ==null||value.length()==0){ //第一次訪問  
                  jedis.setex( ip, 60,String. valueOf(0));  
             } else{  
                  int v = Integer.parseInt (value );  
                  if(v >=10){  
                      return false ;  
                 }  
             }  
              jedis.incr( ip);  
              return true ;  
        }  
      
        /** 
         * @return 
         */  
        public Jedis getRedis() {  
              jedisPool = getJedisPool();  
             Jedis jedis = jedisPool.getResource();  
              return jedis ;  
        }  
      
        /** 
         * 
         */  
        public JedisPool getJedisPool() {  
             JedisPoolConfig poolConfig = new JedisPoolConfig();  
              // 控制一個pool最多有多少個 jedis實例。  
              poolConfig.setMaxTotal(1000);  
              // 控制一個pool最多有多少個狀態為idle(空閑的)的 jedis實例。  
              poolConfig.setMaxIdle(10);  
              // 表示當borrow(引入)一個 jedis實例時,最大的等待時間,如果超過等待時間,則直接拋出JedisConnectionException;  
              poolConfig.setMaxWaitMillis(200000);  
              // 在borrow一個jedis實例時,是否提前進行validate操作;如果為true,則得到的 jedis實例均是可用的;  
              poolConfig.setTestOnBorrow(true);  
      
              return new JedisPool(poolConfig, host, port);  
        }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM