Redis键的生存时间(expire)

一、redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它。

  • expire 设置生存时间(单位/秒)
  • pexpire设置生存时间(单位/毫秒)
  • ttl/pttl 查看键的剩余生存时间
  • persist 取消生存时间
  • expireat [key] unix时间戳1351858600
  • pexpireat [key] unix时间戳(毫秒)1351858700000

二、 应用场景:

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

三、限制网站访客访问频率

package com.chb.common.iface.database.redis;


import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisUtil {
	private final String host = "192.168.179.14";
	private final int port = 6379;
	
	public static void main(String[] args) {
		RedisUtil redisUtil = new RedisUtil();
		Jedis jedis = redisUtil.connect1();
		for (int i = 0 ; i < 15; i++) {
			boolean visited = redisUtil.checkLogin(jedis, "192.168.179.11");
			System.out.println("是否允许访问:" + visited);
		}
	}
	
	
	public boolean checkLogin(Jedis jedis, String key) { 
		String value = jedis.get(key);
		if (value == null) {
			jedis.set(key, "0");
			jedis.expire(key, 60); // 设置生存周期60s
		} else {
			int count = Integer.parseInt(value);
			if (count >= 10) {
				System.out.println("当前访问频率过于频繁....");
				return false;
			}
		}
		jedis.incr(key);  // 累加访问次数
		
		return true;
	}
	
	
	
	public Jedis connect() {
		Jedis jedis = new Jedis(host, port);
		return jedis;
	}	
	
	// 使用连接池
	public Jedis connect1() {
		JedisPoolConfig poolConfig = new JedisPoolConfig();
		poolConfig.setMaxTotal(100);//总连接数
		poolConfig.setMaxIdle(10);//空闲链接数
		poolConfig.setMaxWaitMillis(3000);//创建连接的超时时间
		poolConfig.setTestOnBorrow(true);//在创建连接的时候是否会测试
		JedisPool jedisPool = new JedisPool(poolConfig, host, port);
		
		// 通过连接池获取jedis 连接
		Jedis jedis = jedisPool.getResource();
		return jedis;
	}
}

猜你喜欢

转载自blog.csdn.net/wuxintdrh/article/details/93306095