登录  /  注册
首页 > Java > java教程 > 正文

Java中关于redis键的生存时间(expire)具体分析

黄舟
发布: 2017-07-27 15:27:51
原创
8198人浏览过

1、redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它
     expire      设置生存时间(单位/秒)
     pexpire    设置生存时间(单位/毫秒)
     ttl/pttl     查看键的剩余生存时间
     persist     取消生存时间
     expireat [key] unix时间戳1351858600
     pexpireat [key] unix时间戳(毫秒)1351858700000
2、应用场景
     限时的优惠活动
     网站数据缓存(对于一些需要定时更新的数据)
     限制网站访客访问频率(例如:1分钟最多访问10次)


    /** 
         * 限制网站访客访问频率(例如:1分钟最多访问10次),其中: 访客通过IP标识,即同一个IP在1分钟内仅能访问10次 
         */  
        @Test  
        public void test4(){  
              final String ip = "127.0.0.1" ;  
             Jedis redis = null;  
              //模拟同一个用户连续访问20次  
              for(int i =0;i <20;i ++){  
                  boolean t = validate(ip);  
                  if(t ){  
                     System. out.println("恭喜你,购票成功!" +i );  
                 } else{  
                      //获取当前ip过期时间  
                      redis = getRedis();  
                      break;  
                 }  
             }  
              while(true &&redis.ttl(ip)>0){  
                 System. out.println("抱歉,你访问过度频繁,请" +redis .ttl(ip )+"秒后再来访问!" );  
                  try {  
                     Thread. sleep(1000);  
                 } catch (InterruptedException e ) {  
                      e.printStackTrace();  
                 }  
             }  
             System. out.println("你可以再次访问了" );  
        }  
      
        /** 
         * 
         * @param ip 
         * @return  true: 可以访问,false: 表示已经达到最大上线 
         */  
        public boolean validate( String ip ) {  
             Jedis jedis = getRedis();  
             String value = jedis.get( ip);  
              if(value ==null||value.length()==0){ //第一次访问  
                  jedis.setex( ip, 60,String. valueOf(0));  
             } else{  
                  int v = Integer.parseInt (value );  
                  if(v >=10){  
                      return false ;  
                 }  
             }  
              jedis.incr( ip);  
              return true ;  
        }  
      
        /** 
         * @return 
         */  
        public Jedis getRedis() {  
              jedisPool = getJedisPool();  
             Jedis jedis = jedisPool.getResource();  
              return jedis ;  
        }  
      
        /** 
         * 
         */  
        public JedisPool getJedisPool() {  
             JedisPoolConfig poolConfig = new JedisPoolConfig();  
              // 控制一个pool最多有多少个 jedis实例。  
              poolConfig.setMaxTotal(1000);  
              // 控制一个pool最多有多少个状态为idle(空闲的)的 jedis实例。  
              poolConfig.setMaxIdle(10);  
              // 表示当borrow(引入)一个 jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;  
              poolConfig.setMaxWaitMillis(200000);  
              // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的 jedis实例均是可用的;  
              poolConfig.setTestOnBorrow(true);  
      
              return new JedisPool(poolConfig, host, port);  
        }
登录后复制

 

以上就是Java中关于redis键的生存时间(expire)具体分析的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号