redis中键的生存时间(expire)

时间:2023-03-08 15:50:44

1、redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它 
expire 设置生存时间(单位/秒)

redis中键的生存时间(expire)

pexpire 设置生存时间(单位/毫秒)

ttl/pttl 查看键的剩余生存时间

redis中键的生存时间(expire)

persist 取消生存时间

redis中键的生存时间(expire)

expireat [key] unix时间戳1351858600 
pexpireat [key] unix时间戳(毫秒)1351858700000

2、应用场景 
限时的优惠活动 
网站数据缓存(对于一些需要定时更新的数据) 
限制网站访客访问频率(例如:1分钟最多访问10次)

package cn.crxy.redis;

import static org.junit.Assert.*;

import java.util.List;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.Transaction; public class RedisTest { String ip = "192.168.1.170";
int port = 6379;
Jedis jedis = new Jedis(ip, port);
/**
* 仅供测试使用,单机无连接池方式
* @throws Exception
*/
@Test
public void test1() throws Exception {
//获取到redis服务器的链接
jedis.set("crxy", "wwww");
String value = jedis.get("crxy");
System.out.println(value);
} /**
* 单机连接池方式
* @throws Exception
*/
@Test
public void test2() throws Exception { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//指定连接池中最大空闲连接数
jedisPoolConfig.setMaxIdle(10);
//链接池中创建的最大连接数
jedisPoolConfig.setMaxTotal(100);
//设置创建链接的超时时间
jedisPoolConfig.setMaxWaitMillis(2000);
//表示连接池在创建链接的时候会先测试一下链接是否可用,这样可以保证连接池中的链接都可用的。
jedisPoolConfig.setTestOnBorrow(true); //创建一个jedis连接池
JedisPool jedisPool = new JedisPool(jedisPoolConfig, ip, port);
//从连接池中获取一个链接
Jedis jedis = jedisPool.getResource();
String value = jedis.get("crxy");
System.out.println(value); //把连接返回给连接池
jedisPool.returnResource(jedis);
} /**
* 限制网站访客的访问频率
* 一分钟之内最多访问10次
*/
@Test
public void test3() throws Exception {
String ip = "192.168.1.110";
for(int i=1;i<20;i++){
boolean flag = testLogin(ip);
if(flag){
System.out.println("正常访问"+i);
}else{
System.out.println("访问频繁,禁止访问");
}
} } //根据用户的ip校验用户是否可以继续访问
private boolean testLogin(String ip) {
String value = jedis.get(ip);
if(value==null){
jedis.incr(ip);
//设置ip的生存时间
jedis.expire(ip, 60);
}else{
int parseInt = Integer.parseInt(value);
if(parseInt>=10){
return false;
}
jedis.incr(ip);
}
return true;
} }