[redisson]利用Redisson按天做限流,历史生成的限流key不会自动清除

2024-07-18 845 views
1

利用Redisson按天做限流,历史生成的限流key不会自动清除,这个如何处理,可以设置缓存过期时间吗?

// rate limit 100 times per day
String date = DateFormatUtils.format(new Date(), BaseConstants.DATE_FORMAT_LEAN);
RRateLimiter timesPerDayRateLimiter = redissonClient.getRateLimiter(String.format(RedisConstants.TOKEN_REFRESH_TIMES_PER_DAY_RATE_LIMIT, date, userId));
timesPerDayRateLimiter.trySetRate(RateType.OVERALL, tokenProperties.getTokenRefreshTimesPerDayRateLimit(), 1, RateIntervalUnit.DAYS);

图像

该缓存历史会清除 {token:refresh:20201021:68155c4000eb4d79a3f9516bfc51f9c5}:value

该缓存历史未清除 token:refresh:20201021:68155c4000eb4d79a3f9516bfc51f9c5

回答

2

有任何代码可以重现它吗?

9

并没有,类似token:refresh:20201021:68155c4000eb4d79a3f9516bfc51f9c5,昨天生成的key第二天就不会再去使用了,redisson的限流机制顾限流key默认都不清除的?

3

找到解决方案了,限流器的超时时间需要手动设置,默认没有设置。设置过程中发现一个bug,直接设置1天无效,只能设置24小时才会生效

// 无效
timesPerDayRateLimiter.expire(1, TimeUnit.DAYS);
// 有效
timesPerDayRateLimiter.expire(24, TimeUnit.HOURS);
6

好的,谢谢

5

@colddew

你使用哪个版本的 Redisson?