文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于Java怎么实现Redis多级缓存

2023-06-29 14:58

关注

这篇文章主要介绍“基于Java怎么实现Redis多级缓存”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Java怎么实现Redis多级缓存”文章能帮助大家解决问题。

一、多级缓存

1. 传统缓存方案

请求到达tomcat后,先去redis中获取缓存,不命中则去mysql中获取

基于Java怎么实现Redis多级缓存

2. 多级缓存方案

基于Java怎么实现Redis多级缓存

二、JVM本地缓存

缓存是存储在内存中,数据读取速度较快,能大量减少对数据库的访问,减少数据库压力

分布式缓存,如redis
 - 优点: 存储容量大,可靠性好,可以在集群中共享
 - 缺点: 访问缓存有网络开销
 - 场景: 缓存数据量大,可靠性高,需要在集群中共享的数据

进程本地缓存, 如HashMap, GuavaCache
- 优点:读取本地内存,没有网络开销,速度更快
- 缺点:存储容量有限,可靠性低(如重启后丢失),无法在集群中共享
- 场景:性能要求高,缓存数据量少

1. 实用案例

<dependency>     <groupId>com.github.ben-manes.caffeine</groupId>     <artifactId>caffeine</artifactId>     <version>3.0.5</version> </dependency>
package com.erick.cache;import com.github.benmanes.caffeine.cache.Cache;import com.github.benmanes.caffeine.cache.Caffeine;import java.time.Duration;public final class CacheUtil {    private static int expireSeconds = 2;    public static Cache<String, String> cacheWithExpireSeconds;    private static int maxPairs = 1;    public static Cache<String, String> cacheWithMaxPairs;    static {                cacheWithExpireSeconds = Caffeine.newBuilder()                .expireAfterWrite(Duration.ofSeconds(expireSeconds))                .build();                cacheWithMaxPairs = Caffeine.newBuilder()                .maximumSize(maxPairs)                .build();    }        public static String getKeyWithExpire(String key) {        return cacheWithExpireSeconds.get(key, value -> {            return getResultFromDB();        });    }    public static String getKeyWithMaxPair(String key) {        return cacheWithMaxPairs.get(key, value -> {            return getResultFromDB();        });    }    private static String getResultFromDB() {        System.out.println("数据库查询");        return "db result";    }}
package com.erick.cache;import java.util.concurrent.TimeUnit;public class Test {    @org.junit.Test    public void test01() throws InterruptedException {        CacheUtil.cacheWithExpireSeconds.put("name", "erick");        System.out.println(CacheUtil.getKeyWithExpire("name"));        TimeUnit.SECONDS.sleep(3);        System.out.println(CacheUtil.getKeyWithExpire("name"));    }    @org.junit.Test    public void test02() throws InterruptedException {        CacheUtil.cacheWithMaxPairs.put("name", "erick");        CacheUtil.cacheWithMaxPairs.put("age", "12");        System.out.println(CacheUtil.getKeyWithMaxPair("name"));        System.out.println(CacheUtil.getKeyWithMaxPair("age"));        TimeUnit.SECONDS.sleep(2);        System.out.println(CacheUtil.getKeyWithMaxPair("name")); // 查询不到了        System.out.println(CacheUtil.getKeyWithMaxPair("age"));    }}

三、缓存一致性

1. 常见方案

1.1 设置有效期
1.2 同步双写
1.3 异步通知

基于Java怎么实现Redis多级缓存

基于Java怎么实现Redis多级缓存

2. 基于Canal的异步通知

2.1 mysql主从复制

基于Java怎么实现Redis多级缓存

2.2 canal 工作原理

关于“基于Java怎么实现Redis多级缓存”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯