• 【redis中键的生存时间(expire) 】


    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);  
            }  
  • 相关阅读:
    转载:[Oracle]杀死正在执行的sql语句
    转载:记录一次MySQL两千万数据的大表优化解决过程
    转载:logback日志详解
    转载:MySQL千万级大表优化攻略
    使用dbUnit的 IDataSet 因乱序造成assert失败而采取的措施
    解锁用户scott并授权
    两表连接各种Join图示,SQL及查询结果
    一句Delete..In.. 删除语句的优化
    大数据技术之_08_Hive学习_02_DDL数据定义(创建/查询/修改/删除数据库+创建表+分区表+修改表+删除表)+DML数据操作(数据导入+数据导出+清除表中数据)
    大数据技术之_08_Hive学习_01_Hive入门+Hive安装、配置和使用+Hive数据类型
  • 原文地址:https://www.cnblogs.com/zdd-java/p/7244707.html
Copyright © 2020-2023  润新知