您的位置:首页 > 编程语言 > Java开发

缓存时间小技巧-随机打散

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;

当然以防万一,可以设置默认值,防止从配置文件里读取不到。

原文链接

缓存时间小技巧-随机打散

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring Java YML Spring Boot