百万数据量下如何对接口数据进行缓存预热(一)

1.前言

        这是作者进行记录自己学习redis缓存技术的记录贴,作者会持续更新下去的。

2.分析

2.1缓存预热的优点

        解决了接口首次响应过慢的问题, 可以让用户始终访问很快

2.2缓存预热的缺点

       1.增加开发成本(需要额外的开发,设计)

       2.预热的时机和时间如果错了,有可能缓存的数据不正确或者太老

       3.需要占用额外的空间

2.3怎么进行缓存预热?

        1.定时任务

        2.手动触发

3.定时触发预热

3.1定时执行预热会遇到的问题

        主要是进行项目部署的时候,不会是仅仅进行部署到单机上,但是这就会出现一个问题,多个服务器上的项目都会进行去执行这个定时任务,那问题就来了,都去执行定时任务,会导致很多问题,至少也会导致服务器资源的浪费,比如我们有上千台服务器,都去执行这个任务,那是不是会造成很大的性能浪费呢?

3.2限制只有单机去执行定时任务

4.分布式锁会遇到的问题和解决方案

4.1可能会出现的问题

4.2实现分布式锁的方案

4.3抢锁机制

        核心思想就是: 先来的人先把数据改成自己的标识(服务器IP) => 后来的人发现标识已经存在,就会抢锁失败,继续等待

        等先来的人执行方法结束,把标识情况,其他人继续抢锁

5.如果是多机redis怎么办?--- redis红锁

Redisson--红锁(Redlock)--使用/原理-CSDN博客

6.为什么使用分布式锁?而不是锁?

7.定时任务如何实现?

7.1哪些方式可以实现定时任务

7.2采用第一种方式需要怎么做?

        1.主类开启@EnableScheduling

        2.给需要执行定时任务方法进行添加@Scheduling注解,指定cron表达式或者执行频率

7.3只有傻子才会背cron表达式

在线Cron表达式生成器/

在线crontab表达式执行时间计算 - 码工具/        

8.代码实现

8.1引入redisson

<!--    redission    -->
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.17.5</version>
</dependency>

8.2配置redisson

8.3进行校验看门狗机制和实现分布式锁

        当我们默认进行使用看门狗的时候,我们应该不进行设置过期时间,redis会进行默认设置30秒的过期时间,当时间还有20秒的时候就会自动续期到30秒,由此反复。

@Test
void testWatchDog() {
    RLock lock = redissonClient.getLock("yangpao:precachejob:docache:lock");

    try {
        // 只有一个线程可以获得锁
        if (lock.tryLock(0, -1, TimeUnit.MILLISECONDS)) {
            Thread.sleep(3000000);
            System.out.println("getLock: " + Thread.currentThread().getId());
        }
    } catch (Exception e) {
        log.info("doCacheRecommendUser error", e);
    } finally {
        // 只能释放自己的锁
        if (lock.isHeldByCurrentThread()) {
            System.out.println("unLock: " + Thread.currentThread().getId());
            lock.unlock();
        }
    }
}

8.4redisson搭配Spring Scheduler实现定时针对重点用户预热数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值