redis 失效时间单位是秒还是毫秒_【redis中键的生存时间(expire) 】

本文介绍了如何使用 Redis 实现网站访客访问频率限制,例如限制同一 IP 地址在1分钟内最多访问10次。通过 `setex` 命令设置键的生存时间为60秒,并利用 `ttl` 检查键的剩余生存时间,以判断用户是否可以继续访问。在访问限制检查中,使用 `incr` 命令递增计数,并在达到上限时返回错误信息。此外,还展示了如何配置 Jedis 连接池以确保连接的有效性。
摘要由CSDN通过智能技术生成

/*** 限制网站访客访问频率(例如:1分钟最多访问10次),其中: 访客通过IP标识,即同一个IP在1分钟内仅能访问10次*/@Testpublic voidtest4(){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("你可以再次访问了");

}/***

*@paramip

*@returntrue: 可以访问,false: 表示已经达到最大上线*/

public booleanvalidate( 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

*/

publicJedis getRedis() {

jedisPool=getJedisPool();

Jedis jedis=jedisPool.getResource();returnjedis ;

}/****/

publicJedisPool getJedisPool() {

JedisPoolConfig poolConfig= newJedisPoolConfig();//控制一个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 newJedisPool(poolConfig, host, port);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值