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代碼
- package bj.zm.redis;
- import org.junit.Test;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.Transaction;
- /**
- * 使用鍵的生存時間來實作控制使用者通路網站的頻率
- * @author Administrator
- *
- */
- public class TestWebSite {
- Jedis jedis = new Jedis("192.168.1.110", 6379);
- @Test
- public void test(){
- String ip = "192.168.1.1";// 客戶IP
- website(ip);
- }
- //每次遞增1,如果在60S内通路超過了3次 則 通路頻率過高(防止抓取) 模拟的時候 連續執行多次junit來實作列印使用者通路頻率超限的效果
- private void website(String ip) {
- String value = jedis.get(ip);
- if(value==null){
- Transaction transaction = jedis.multi();
- transaction.incr(ip);
- transaction.expire(ip, 60);
- transaction.exec();
- }else{
- int intvalue = Integer.parseInt(value);
- if(intvalue<=3){
- jedis.incr(ip);
- }else{
- System.err.println("使用者通路頻率超限!");
- }
- }
- }
梅花香自古寒來