redis中鍵的生存時間(expire)


1、redis中可以使用expire命令設置一個鍵的生存時間,到時間后redis會自動刪除它 
expire 設置生存時間(單位/秒) 

pexpire 設置生存時間(單位/毫秒) 

ttl/pttl 查看鍵的剩余生存時間 

persist 取消生存時間 

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

2、應用場景 
限時的優惠活動 
網站數據緩存(對於一些需要定時更新的數據) 
限制網站訪客訪問頻率(例如:1分鍾最多訪問10次)

package cn.crxy.redis;

import static org.junit.Assert.*;

import java.util.List;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction;

public class RedisTest {
    
    String ip = "192.168.1.170";
    int port = 6379;
    Jedis jedis = new Jedis(ip, port);
    /**
     * 僅供測試使用,單機無連接池方式
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {
        //獲取到redis服務器的鏈接
        jedis.set("crxy", "wwww");
        String value = jedis.get("crxy");
        System.out.println(value);
    }
    
    /**
     * 單機連接池方式
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //指定連接池中最大空閑連接數
        jedisPoolConfig.setMaxIdle(10);
        //鏈接池中創建的最大連接數
        jedisPoolConfig.setMaxTotal(100);
        //設置創建鏈接的超時時間
        jedisPoolConfig.setMaxWaitMillis(2000);
        //表示連接池在創建鏈接的時候會先測試一下鏈接是否可用,這樣可以保證連接池中的鏈接都可用的。
        jedisPoolConfig.setTestOnBorrow(true);
        
        //創建一個jedis連接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, ip, port);
        //從連接池中獲取一個鏈接
        Jedis jedis = jedisPool.getResource();
        String value = jedis.get("crxy");
        System.out.println(value);
        
        //把連接返回給連接池
        jedisPool.returnResource(jedis);
    }
    
    
    /**
     * 限制網站訪客的訪問頻率
     * 一分鍾之內最多訪問10次
     */
    @Test
    public void test3() throws Exception {
        String ip = "192.168.1.110";
        for(int i=1;i<20;i++){
            boolean flag = testLogin(ip);
            if(flag){
                System.out.println("正常訪問"+i);
            }else{
                System.out.println("訪問頻繁,禁止訪問");
            }
        }
        
        
    }
    
    
    //根據用戶的ip校驗用戶是否可以繼續訪問
    private boolean testLogin(String ip) {
        String value = jedis.get(ip);
        if(value==null){
            jedis.incr(ip);
            //設置ip的生存時間
            jedis.expire(ip, 60);
        }else{
            int parseInt = Integer.parseInt(value);
            if(parseInt>=10){
                return false;
            }
            jedis.incr(ip);
        }
        return true;
    }

}

 


免責聲明!

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



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