redis访问优化

2019-06-13  本文已影响0人  和平菌

一、
使用redis进行去重的时候用到了setnx
原先的写法是

setnx = redisDao.setnx(key, "1") == 1;
if (setnx){
    redisDao.expire(key, timeOut);
}

那么一条去重的数据会访问2次redis

修改为

String v = redisDao.set(key, "1", "NX", "EX", timeOut);
setnx = "OK".equals(v);

一次请求即可满足

二、按天去重key过期雪崩的问题
使用redis按天去重的时候,有个问题就是自然天跨天的时候,所有key会集中过期,会消耗大量资源

修改为 日期(yyyyMMdd)+key的形式,过期时间修改为24点后+10分钟 然后随机延迟1到10分钟,这样可以保证key分批过期

private static final DateTimeFormatter formater = DateTimeFormatter.ofPattern("yyyyMMdd");
private String date = LocalDateTime.now().format(formater);
private long lastUpdateDateMills = 0;
private static final long UPDATE_INTERVAL = 60 * 1000;


long  currentTimeMillis = System.currentTimeMillis();
if(currentTimeMillis - lastUpdateDateMills > UPDATE_INTERVAL){
      date = LocalDateTime.now().format(formater);
      lastUpdateDateMills = currentTimeMillis;
}





DateUtil.getTodayLastSeconds() + ( 10 + ran.nextInt(10) ) * 60
上一篇 下一篇

猜你喜欢

热点阅读