设为首页 收藏本站
查看: 1024|回复: 0

[经验分享] 【redis中键的生存时间(expire) 】

[复制链接]

尚未签到

发表于 2017-12-22 06:12:16 | 显示全部楼层 |阅读模式
/**  * 限制网站访客访问频率(例如: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);  
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426684-1-1.html 上篇帖子: Redis实现高并发下的抢购、秒杀功能 下篇帖子: php-redis扩展模块安装记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表