zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
  • 相关阅读:
    优美的回文串--全国模拟(二)
    创造新世界--全国模拟(二)
    字符串分类--全国模拟(二)
    平衡数--全国模拟(二)
    最小矩形--全国模拟(二)
    组装三角形--全国模拟(二)
    深入.NET内测题
    面向对象七大设计原则
    创建数据库普通临时表和创建数据库全局变量表和俩者的区别
    使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
  • 原文地址:https://www.cnblogs.com/huxinga/p/6492946.html
Copyright © 2011-2022 走看看