redis中键的生存时间(expire)
1、redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它
expire 设置生存时间(单位/秒)
pexpire 设置生存时间(单位/毫秒)
ttl/pttl 查看键的剩余生存时间
persist 取消生存时间
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; } }