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)具体分析的详细内容。