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 Jedisip, port);
    /**
     * 仅供测试使用,单机无连接池方式
     * @throws Exception
     */
    @Test
    public void test1) throws Exception {
        //获取到redis服务器的链接
        jedis.set"crxy", "wwww");
        String value = jedis.get"crxy");
        System.out.printlnvalue);
    }
    
    /**
     * 单机连接池方式
     * @throws Exception
     */
    @Test
    public void test2) throws Exception {
        
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig);
        //指定连接池中最大空闲连接数
        jedisPoolConfig.setMaxIdle10);
        //链接池中创建的最大连接数
        jedisPoolConfig.setMaxTotal100);
        //设置创建链接的超时时间
        jedisPoolConfig.setMaxWaitMillis2000);
        //表示连接池在创建链接的时候会先测试一下链接是否可用,这样可以保证连接池中的链接都可用的。
        jedisPoolConfig.setTestOnBorrowtrue);
        
        //创建一个jedis连接池
        JedisPool jedisPool = new JedisPooljedisPoolConfig, ip, port);
        //从连接池中获取一个链接
        Jedis jedis = jedisPool.getResource);
        String value = jedis.get"crxy");
        System.out.printlnvalue);
        
        //把连接返回给连接池
        jedisPool.returnResourcejedis);
    }
    
    
    /**
     * 限制网站访客的访问频率
     * 一分钟之内最多访问10次
     */
    @Test
    public void test3) throws Exception {
        String ip = "192.168.1.110";
        forint i=1;i<20;i++){
            boolean flag = testLoginip);
            ifflag){
                System.out.println"正常访问"+i);
            }else{
                System.out.println"访问频繁,禁止访问");
            }
        }
        
        
    }
    
    
    //根据用户的ip校验用户是否可以继续访问
    private boolean testLoginString ip) {
        String value = jedis.getip);
        ifvalue==null){
            jedis.incrip);
            //设置ip的生存时间
            jedis.expireip, 60);
        }else{
            int parseInt = Integer.parseIntvalue);
            ifparseInt>=10){
                return false;
            }
            jedis.incrip);
        }
        return true;
    }

}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注