redis数据库设置对象的过期时间,到期后自动删除该条数据!过期时间的事情经常发生。比如大家领到了一些购物券。这张购物券有一个过期时间。必须在某节点之前(某年某月末日)之前,使用掉,否则该券就会过期,无法再使用了。
下面就是redis设置过期时间的简单案例。
@Testpublic void testRedisTime(){Jedis jedis = new Jedis("localhost",6379);//向redis数据库增加一条数据,带上过期的时间,1分钟后过期。jedis.setex("xiang03",60,"姹紫嫣红003");//创建定时器Timer timer = new Timer();//创建定时器任务TimerTask timerTask = new TimerTask() {@Overridepublic void run() {System.out.println(jedis.get("xiang03"));}};timer.schedule(timerTask,1000*61);}
jedis.setex()这个方法,就可以带一个(单位:秒)的参数。第一个参数key.第二个参数过期时间(在当前的基础之上,向后推迟多少秒)。第三个参数是value.
我们设置了一个鲜花的数据,key:xiang03;value:姹紫嫣红03;过期时间是60秒后过期。
等到时间超过60秒之后,我们再去数据库内搜索这条key。就会出现返回了null.空对象。找不到了。说明redis已经删除了这条数据。
实际上,有时候,我们为了方便,还会设置具体的时间节点,而不是这样固定的时间数字。上面的案例使用的固定时间数字,比如,向后推迟1分钟,1小时,1天等,都可以自己计算出来。前提是你得输入是秒为单位。大家换算一下就行了。
那么,想输入具体的时间节点也是可以的,是用到另外一个方法。
redis设置指定日期过期的方法如下:
在Redis中,我们可以使用expireat、pexpireat命令来设置key的过期时间为指定日期。expireat命令的时间参数为UNIX时间戳,而pexpireat命令的时间参数为UNIX时间戳的毫秒表示。可以使用Java的Date类或Calendar类将时间转换为UNIX时间戳。
// 使用jedis的expireAt方法设置key在2019-01-01 00:00:00时过期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2019-01-01 00:00:00");
long unixTime = date.getTime()/1000;
jedis.expireAt("key", unixTime);