广告
返回顶部
首页 > 资讯 > 精选 >基于Java怎么实现Redis多级缓存
  • 420
分享到

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

2023-06-29 14:06:15 420人浏览 泡泡鱼
摘要

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

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

一、多级缓存

1. 传统缓存方案

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

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

2. 多级缓存方案

  • tomcat的请求并发数,是远小于redis的,因此tomcat会成为瓶颈

  • 利用请求处理每个环节,分别添加缓存,减轻tomcat压力,提升服务性能

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

二、JVM本地缓存

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

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

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

1. 实用案例

  • Caffeine是一个基于java8开发的,提供了近乎最佳命中率的高性能的本地缓存库

  • 目前spring内部的缓存用的就是这个

<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的异步通知

  • 是阿里旗下的一款开源项目,基于java开发

  • 基于数据库增量日志解析,提供增量数据订阅和消费

  • 基于Mysql的主从备份的思想

2.1 mysql主从复制

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

2.2 canal 工作原理
  • canal 模拟 Mysql slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议

  • MySQL master 收到 dump 请求, 开始推送 binary log 给 slave (即 canal )

  • canal 解析 binary log 对象(原始为 byte 流)

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

--结束END--

本文标题: 基于Java怎么实现Redis多级缓存

本文链接: https://www.lsjlt.com/news/325418.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Java怎么实现Redis多级缓存
    这篇文章主要介绍“基于Java怎么实现Redis多级缓存”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Java怎么实现Redis多级缓存”文章能帮助大家解决问题。一、多级缓存1. 传统缓存方案请...
    99+
    2023-06-29
  • 基于Java实现Redis多级缓存方案
    目录一、多级缓存1. 传统缓存方案2. 多级缓存方案二、JVM本地缓存1. 实用案例三、缓存一致性1. 常见方案1.1 设置有效期1.2 同步双写1.3 异步通知2. 基于Canal...
    99+
    2022-11-13
  • 基于Spring Cache实现Caffeine+Redis二级缓存
    目录一、聊聊什么是硬编码使用缓存?二、Spring Cache简介1、Cache接口2、CacheManager接口3、常用注解说明三、使用二级缓存需要思考的一些问题?四、Caffe...
    99+
    2022-11-13
  • Redis实现多级缓存
    本文实例为大家分享了Redis实现多级缓存的具体代码,供大家参考,具体内容如下 一、多级缓存 1. 传统缓存方案 请求到达tomcat后,先去redis中获取缓存,不命中则去mysql中获取 2. 多级缓存方案 tom...
    99+
    2022-07-28
    Redis 多级缓存
  • 基于Spring Cache如何实现Caffeine+Redis二级缓存
    这篇文章主要为大家展示了“基于Spring Cache如何实现Caffeine+Redis二级缓存”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Spring Cache如...
    99+
    2023-06-29
  • 基于Redis缓存怎么实现分布式锁
    本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是...
    99+
    2023-06-19
  • redis如何实现多级缓存
                                 ...
    99+
    2022-10-18
  • java二级缓存怎么实现
    Java二级缓存的实现可以通过使用第三方缓存库或自定义缓存类来完成。1. 使用第三方缓存库:常见的第三方缓存库有Ehcache、Re...
    99+
    2023-08-20
    java
  • Java实现本地缓存、分布式缓存及多级缓存
    以下均为自己参考其它博主文章或自己理解整理而成,如有错误之处,欢迎在评论区批评指正! 0. 缓存简介        像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景,很容易造...
    99+
    2023-09-17
    java
  • redis实现多级缓存同步方案详解
    目录前言多级缓存数据同步如何使用Redis6客户端缓存总结前言 前阵子参加业务部门的技术方案评审,故事的背景是这样:业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图 按理来说这个系统因为受众很小,可以说...
    99+
    2022-12-21
    redis多级缓存同步 redis多级缓存 redis缓存同步
  • 怎么在MySQL和Redis中实现二级缓存
    这期内容当中小编将会给大家带来有关怎么在MySQL和Redis中实现二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。redis简介Redis 是完全开源免费的,遵守...
    99+
    2022-10-18
  • 怎么实现redis缓存
    这篇文章主要介绍了怎么实现redis缓存的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么实现redis缓存文章都会有所收获,下面我们一起来看看吧。1、使用宝塔面板先搭建好微擎...
    99+
    2022-10-19
  • java怎么实现Redis的LRU缓存机制
    本篇内容主要讲解“java怎么实现Redis的LRU缓存机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java怎么实现Redis的LRU缓存机制”吧!目录LRU概述使用LinkedHashM...
    99+
    2023-06-20
  • Java基于LoadingCache实现本地缓存的示例代码
    目录一、 添加 maven 依赖二、CacheBuilder 方法说明三、创建 CacheLoader四、工具类五、guava Cache数据移除一、 添加 maven 依赖 <...
    99+
    2022-11-12
  • MybatisPlus二级缓存怎么实现
    这篇文章主要介绍了MybatisPlus二级缓存怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MybatisPlus二级缓存怎么实现文章都会有所收获,下面我们一起来看看吧。一、序言本文承接[Mybati...
    99+
    2023-06-29
  • MySQL与Redis实现二级缓存的方法是什么
    这篇文章将为大家详细讲解有关MySQL与Redis实现二级缓存的方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。redis简介Redis 是完全开源免费的,遵守B...
    99+
    2022-10-18
  • MySQL与redis缓存怎么实现同步
    MySQL与redis缓存怎么实现同步?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方案1(UDF)场景分析:当我们对MySQL数据库进行数据操作时,同时将...
    99+
    2023-06-14
  • odoo中怎么使用redis实现缓存
    本篇内容主要讲解“odoo中怎么使用redis实现缓存”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“odoo中怎么使用redis实现缓存”吧!Odoo中使用Redis实现缓存可以提高系统性能,避...
    99+
    2023-07-05
  • 基于 Spring Aop 环绕通知实现 Redis 缓存双删功能(示例代码)
    基于 spring aop 常规应用场景多是用于日志记录以及实现 Redis 分布式锁,在 github 中也有项目是把它拿来当作缓存的异常捕捉。从而避免影响实际业务的开发;在某天,笔者有个业务开发是给某个服务模块增加 ...
    99+
    2022-08-16
    Spring Aop Redis 缓存双删 Spring Aop Redis 缓存
  • Hibernate 3中怎么实现二级缓存
    Hibernate 3中怎么实现二级缓存,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Hibernate 3二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作