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

概述


之前在营销系统里,开发了一个接口,用于在商品详情页里显示优惠券,方便用户在商详里看到优惠券和领取优惠券。由于商详的访问量比较大,因此显示优惠券的接口必须加上缓存。


缓存时间设计


原先优惠券缓存时间是固定设置为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;

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


原文链接


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

转载于:https://my.oschina.net/samgege/blog/2993498

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值