我的编程空间,编程开发者的网络收藏夹
学习永远不晚

轻松搞定Spring集成缓存,让你的应用程序飞起来!

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

轻松搞定Spring集成缓存,让你的应用程序飞起来!

Spring集成缓存

在这里插入图片描述

主页传送门:📀 传送

  Spring 提供了对缓存的支持,允许你将数据存储在缓存中以提高应用程序的性能。Spring 缓存抽象基于 Java Caching API,但提供了更简单的编程模型和更高级的功能。
  Spring 集成缓存提供了一种方便的方式来使用缓存,从而提高应用程序的性能。Spring 缓存抽象提供了通用的缓存支持,并集成了常见的缓存解决方案。

缓存接口


  Spring 的缓存 API 以注解方式提供。Spring缓存接口定义主要由org.springframework.cache.Cache和org.springframework.cache.CacheManager两个接口完成。

  • org.springframework.cache.Cache:这个接口代表一个缓存组件,Spring框架通过这个接口与缓存交互。它有几个重要的方法:

    • String getName(): 返回缓存的名称。
    • Object get(Object key, Class type): 根据key获取缓存数据,如果数据不存在,返回null。
    • void put(Object key, Object value): 向缓存中添加数据。
    • void evict(Object key): 根据key移除缓存数据。
    • void clear(): 清空缓存。
  • org.springframework.cache.CacheManager:这个接口定义了如何获取Cache实例。它有一个重要的方法:

    • Cache getCache(String name): 根据缓存的名称获取Cache实例。

  Spring通过这些接口与各种缓存实现(如EhCache,Redis,Hazelcast等)进行交互。要使用Spring的缓存功能,只需配置一个实现了CacheManager接口的Bean,然后在需要使用缓存的地方使用@Cacheable,@CacheEvict和@CachePut等注解即可。

开启注解


  Spring 为缓存功能提供了注解功能,但是你必须启动注解:
(1) 在 xml 中声明
  使用cache:annotation-driven/
(2) 使用标记注解
   通过对一个类进行注解修饰的方式在这个类中使用缓存注解。

范例如下:

@Configuration@EnableCachingpublic class AppConfig {}

缓存注解使用


  Spring 对缓存的支持类似于对事务的支持。 首先使用注解标记方法,相当于定义了切点,然后使用 Aop 技术在这个方法的调用前、调用后获取方法的入参和返回值,进而实现了缓存的逻辑。

@Cacheable


  表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段。 这个注解可以用condition属性来设置条件,如果不满足条件,就不使用缓存能力,直接执行方法。 可以使用key属性来指定 key 的生成规则。

范例如下:

@Service  public class ExampleService {        @Cacheable("examples")      public String getExample(String key) {          // 模拟一个耗时操作          try {              Thread.sleep(1000);          } catch (InterruptedException e) {              e.printStackTrace();          }          return "Example for " + key;      }  }

@CachePut


  与@Cacheable不同,@CachePut不仅会缓存方法的结果,还会执行方法的代码段。 当一个方法被标记为 @CachePut,Spring 会在该方法执行后更新缓存。它支持的属性和用法都与@Cacheable一致。

范例如下:

 @Service  public class ExampleService {        @CachePut("examples")      public void updateExample(String key, String value) {          // 更新数据的操作          // ...      }  }

@CacheEvict


  与@Cacheable功能相反,@CacheEvict表明所修饰的方法是用来删除失效或无用的缓存数据。当一个方法被标记为 @CacheEvict,Spring 会在该方法执行后从缓存中移除相关的数据。

范例如下:

@Service  public class ExampleService {        @CacheEvict(value = "examples", key = "#id")      public void evictExample(String id) {          // 从缓存中移除数据的操作          // ...      }  }

@Cacheable、@CacheEvict和@CachePut使用方法的集中展示示例:

@Servicepublic class UserService {    // @Cacheable可以设置多个缓存,形式如:@Cacheable({"books", "isbns"})    @Cacheable(value={"users"}, key="#user.id")    public User findUser(User user) {        return findUserInDB(user.getId());    }    @Cacheable(value = "users", condition = "#user.getId() <= 2")    public User findUserInLimit(User user) {        return findUserInDB(user.getId());    }    @CachePut(value = "users", key = "#user.getId()")    public void updateUser(User user) {        updateUserInDB(user);    }    @CacheEvict(value = "users")    public void removeUser(User user) {        removeUserInDB(user.getId());    }    @CacheEvict(value = "users", allEntries = true)    public void clear() {        removeAllInDB();    }}

@Caching


  如果需要使用同一个缓存注解(@Cacheable、@CacheEvict或@CachePut)多次修饰一个方法,就需要用到@Caching。

@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames="secondary", key="#p0") })public Book importBooks(String deposit, Date date)

@CacheConfig


  与前面的缓存注解不同,这是一个类级别的注解。 如果类的所有操作都是缓存操作,你可以使用@CacheConfig来指定类,省去一些配置。

@CacheConfig("books")public class BookRepositoryImpl implements BookRepository {@Cacheablepublic Book findBook(ISBN isbn) {...}}

缓存存储


  Spring 允许通过配置方式接入多种不同的缓存存储。用户可以根据实际需要选择。

不同的缓存存储,具有不同的性能和特性。

使用 ConcurrentHashMap 作为缓存


示例配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">  <description>使用 ConcurrentHashMap 作为 Spring 缓存</description>    <context:component-scan base-package="io.github.dunwu.spring.cache"/>  <bean id="simpleCacheManager" class="org.springframework.cache.support.SimpleCacheManager">    <property name="caches">      <set>        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="users"/>      </set>    </property>  </bean>  <cache:annotation-driven cache-manager="simpleCacheManager"/></beans>

使用 Ehcache 作为缓存


示例配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:cache="http://www.springframework.org/schema/cache"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">  <description>使用 EhCache 作为 Spring 缓存</description>  <!--配置参考:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-store-configuration-->  <context:component-scan base-package="io.github.dunwu.spring.cache"/>  <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">    <property name="configLocation" value="classpath:ehcache/ehcache.xml"/>  </bean>  <bean id="ehcacheCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">    <property name="cacheManager" ref="ehcache"/>  </bean>  <cache:annotation-driven cache-manager="ehcacheCacheManager"/></beans>

ehcache.xml 中的配置内容完全符合 Ehcache 的官方配置标准。

使用 Caffeine 作为缓存


示例配置:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:cache="http://www.springframework.org/schema/cache"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">  <description>使用 Caffeine 作为 Spring 缓存</description>  <!--配置参考:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-store-configuration-->  <context:component-scan base-package="io.github.dunwu.spring.cache"/>  <bean id="caffeineCacheManager" class="org.springframework.cache.caffeine.CaffeineCacheManager"/>  <cache:annotation-driven cache-manager="caffeineCacheManager"/></beans>

参考资料

Spring 官方文档

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论  你的支持就是我✍️创作的动力!  💞💞💞

来源地址:https://blog.csdn.net/wodejiaAA/article/details/132989681

免责声明:

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

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

轻松搞定Spring集成缓存,让你的应用程序飞起来!

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

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录