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健將要失效的剩余生存時間
persist name 取消name的失效時間
ttl name 如果返回是-1 則表示已經取消了name的失效時間 -1表示永久有效
redis 設置IP單位時間內訪問次數, 比如 1分鍾內只能讓客戶IP訪問量3次,否則封IP:
- 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("用戶訪問頻率超限!");
- }
- }
- }
- }