缓存时间小技巧-随机打散
2018-12-26 14:29
113 查看
概述
之前在营销系统里,开发了一个接口,用于在商品详情页里显示优惠券,方便用户在商详里看到优惠券和领取优惠券。由于商详的访问量比较大,因此显示优惠券的接口必须加上缓存。
缓存时间设计
原先优惠券缓存时间是固定设置为5分钟,但是5分钟过后,就会集体失效,因此便使用一个随机数工具,将缓存时间随机生成。例如:以秒为单位,在240-360这个范围内产生随机数,作为缓存的时间,这样就可以避免优惠券在缓存中集体失效。
随机数工具可以使用线程安全的ThreadLocalRandom
来实现。
import java.util.concurrent.ThreadLocalRandom; public class CacheTimeUtil { public static int generateRandomCacheTime(int origin, int bound) { //万一origin和bound一样,bound默认加300 if (origin == bound) { return ThreadLocalRandom.current().nextInt(origin,(bound + 300)); } return ThreadLocalRandom.current().nextInt(origin,bound); } }
这样调用方只需要传入两个时间就可以了。
int cacheTime = CacheTimeUtil.generateRandomCacheTime(240,360);
根据不同环境设置不同的时间
为了方便测试人员在测试环境测试,可以在测试环境里,将缓存时间调整小一些。例如,缓存时间设置为1到2秒。
如果是使用Spring Boot
应用的话,可以不同的profile
文件里,指定不同的参数就可以了。
例如可以在application-test.yml
文件里如下指定:
productDetailCouponCache: begin: 1 end: 2
然后对应的Controller
类可以如下使用这两个参数:
@Value("${productDetailCouponCache.begin}") private int cacheTimeBegin = 240; @Value("${productDetailCouponCache.end}") private int cacheTimeEnd = 361;
当然以防万一,可以设置默认值,防止从配置文件里读取不到。
原文链接
相关文章推荐
- 缓存,随机,时间,消除空格
- 例6 用LabVIEW计算生成等于某个给定值的随机数据所用时间
- 设置静态内容缓存时间
- [已解决]使用cookie网站不能正常登录,iis时间缓存
- sql 小技巧 =》本周五和上周四的时间
- 小技巧 计算程序运行时间
- 时钟JS---用于时间滚动更新。---小技巧
- Mysql随机插入数字、日期、时间戳
- 生成指定范围内无重复的随机乱序数组(JAVA实现/时间复杂度为O(n))
- 含开始时间,截止时间的规则缓存方案--- 类似时间轮理念,连续变片段化
- 排队论——随机时间概率
- response控制缓存时间
- 页面缓存时间及HTTP头总结
- [小技巧]导文件超出php或nginx超时时间,怎们办?
- CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)
- Aspx页上设置客户端的缓存时间
- redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据
- 时间管理的小技巧
- 常用工具类 (创建调试日志、创建时间戳、随机字符串)
- [三卷天书]记一个asp.net生成两个日期范围内生成随机时间的方法