关于缓存预热

关于缓存预热

应用场景

​ 比如:一个系统中第一个用户访问很慢 此时还没有缓存 这时候就可以使用缓存预热 再比如双十一 用户数量那么多 如果每个人第一次访问时候都得在服务器上查询一次数据库 再将查询结果存入缓存中 这样太慢了

缓存预热的优点和缺点

  • 优点

​ 1.解决上面的问题 也在一定的程度上保护数据库可以让用户始终访问很快

  • 缺点

1.增加开发成本

2需要占用额外的空间

3.预热的时机如果错了 有可能使你的缓存数据太老或者不适合

怎么使用缓存预热?

1.定时

2.手动触发

  • 定时任务

    1.使用spring自带的@Scheduler

    1. Quartz(独立于 Spring 存在的定时任务框架)

    2. XXL-Job 之类的分布式任务调度平台(界面 + sdk)

使用@Scheduler

1.在spring的启动类上添加注解@EnableScheduling

@EnableScheduling
public class UserCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserCenterApplication.class, args);
        log.info("启动成功");
    }

2.在@Scheduler上添加cron表达式

private List<Long>  mainUserList= (List<Long>) Arrays.asList(1L);
   @Scheduled(cron = "0 59 17 * * *")
    public void doCacheRecommendUser(){
       for (Long userId : mainUserList) {
           String RedisKey = String.format("lulu:user:recommend:userId:%s",userId);
           ValueOperations<String, Object> opsForValue = redisTemplate.opsForValue();
           QueryWrapper<User> queryWrapper = new QueryWrapper<>();
           Page<User> userPage = userService.page(new Page<>(1, 20), queryWrapper);
           //写缓存
           try {
               opsForValue.set(RedisKey,userPage,30000, TimeUnit.MILLISECONDS);
           } catch (Exception e) {
               log.info("redis set key err",e);
           }
       }

   }

上面表示的是在每年每星期每日的17:59 0秒 都会执行一次任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值