• 使用Spring Cache实现广告缓存并基于RabbitMQ实现双写一致


    使用Spring Cache实现广告缓存并基于RabbitMQ实现双写一致

    一、Spring Cache简介

    1. Spring Cache介绍

    ​ Spring Cache 是Spring - context-xxx.jar中提供的功能,可以结合EHCache,Redis等缓存工具使用。给用户提供非常方便的缓存处理,缓存基本判断等操作,可以直接使用注解实现。
    ​ 在包含了Spring - context-xxx.jar的Spring Boot项目中,在启动类中添加@EnableCaching注解,即可开启缓存功能。默认Spring Cache是不开启。

    2. Spring Cache优点

    ​ 开发简单,基于注解实现缓存管理。

    2.1 正常情况下使用Redis缓存工具时代码流程

    ​ 以查询逻辑举例。流程如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJL9Je4Z-1662388941403)(images/1.png)]

    2.2 使用Spring Cache后

    ​ 在代码方法中编写对数据库的访问。只需要完成上面流程图中“从mysql取出”部分的代码。剩余事情使用一个非常简单的注解即可,省略了访问redis取数据及把mysql数据缓存到redis的代码,让开发起来更简单。

    3. Spring Cache使用限制(缺点)

    ​ 流程死板。以查询逻辑举例,也就是@Cacheable注解流程:

    1. 访问缓存数据库,查询缓存,如果缓存存在,直接返回。没有加工处理能力。缓存中的数据是什么,就只能返回什么,没有二次加工处理的能力。
    2. 如果缓存中没有数据,则执行方法,查询数据库。当方法返回(return)的时候,把方法的返回值保存到缓存数据库中。方法返回什么,就只能缓存什么。
    3. 且Spring Cache对缓存数据的有效期管理,也非常的死板。默认缓存有效期是永久。且一个项目中,所有Spring Cache管理的缓存的有效期都是一样的。不可以特性化定制。

    基于上述原因,现在在商业项目开发中,很少使用Spring Cache直接管理缓存。只有流程死板,缓存时间固定的数据,可以考虑使用Spring Cache。

    4. Spring Cache加载缓存工具顺序

    ​ 只要检测到项目中配置了下面缓存工具(导入了依赖,在Spring容器中发现对应工具的内容),无论导入多少个缓存工具依赖,只用优先级最高的一个
    ​ 默认寻找缓存工具的顺序:(为什么Redis配置上就可以用的原因)

    1. Generic
    2. JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
    3. EhCache 2.x
    4. Hazelcast
    5. Infinispan
    6. Couchbase
    7. Redis
    8. Caffeine
    9. Simple

    二、基于Spring Cache完成缓存管理

    1. 创建工程

    ​ 创建测试工程

    2. POM依赖

    ​ 添加Spring-boot-starter-web会包含spring-context。就可以使用Spring Cache了。

    ​ spring-boot-start-data-redis 添加后会有Redis配置环境,当前项目没有添加其他缓存工具,所以Spring Cache会使用Redis作为缓存工具。

    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.12.RELEASEversion>
    parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3. 编辑配置文件

    ​ 新建application.yml

    spring:
      redis:
        host: 192.168.8.128
        port: 6379 # 默认值,可省略
    
    • 1
    • 2
    • 3
    • 4

    4. 编辑启动类型

    @SpringBootApplication
    @EnableCaching
    public class SpringCacheApplication {
       
        public static void main(String[]
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    可道云:像Windows操作一样的企业网盘
    一个小型公司人工费用核算winform查询开发(1)
    Metasploit——渗透攻击模块(Exploit)
    解锁数据安全之门:探秘迅软DSE的文件权限控制功能
    【Linux operation 40】Linux中的Localhost
    电脑游戏怎么转移新电脑,换新电脑如何迁移游戏
    java面向对象(九)
    MYSQL 根据唯一索引键更新死锁问题
    用UNIGUI实现的网络共享打印(云打印)效果
    redis(14)主从复制
  • 原文地址:https://blog.csdn.net/woruosuifenglang/article/details/126715166