springboot(十一)缓存

 

1.JSR107

2.缓存使用

3.概念&缓存注解

4.参数含义

5.默认缓存

6.整合redis实现缓存


 

 

1.JSR107

Java Caching定义了5个核心接口,分别是 CachingProvider , CacheManager , Cache , Entry
Expiry
CachingProvider 定义了创建、配置、获取、管理和控制多个 CacheManager 。一个应用可
以在运行期访问多个CachingProvider。
CacheManager 定义了创建、配置、获取、管理和控制多个唯一命名的 Cache ,这些Cache
存在于CacheManager的上下文中。一个CacheManager仅被一个CachingProvider所拥有。
Cache 是一个类似Map的数据结构并临时存储以Key为索引的值。一个Cache仅被一个
CacheManager所拥有。
Entry 是一个存储在Cache中的key-value对。
Expiry 每一个存储在Cache中的条目有一个定义的有效期。一旦超过这个时间,条目为过期
的状态。一旦过期,条目将不可访问、更新和删除。缓存有效期可以通过ExpiryPolicy设置。

 

2.缓存使用

  • 引入spring-boot-starter-cache模块
  • @EnableCaching开启缓存
  • 使用缓存注解
  • 切换为其他缓存
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

 

3.概念&缓存注解

Cache缓存接口,定义缓存操作。实现有:RedisCacheEhCacheCache、ConcurrentMapCache等
CacheManager缓存管理器,管理各种缓存(Cache)组件
@Cacheable主要针对方法配置,能够根据方法的请求参数对其结果进行缓存
@CacheEvict清空缓存
@CachePut保证方法被调用,又希望结果被缓存。
@EnableCaching开启基于注解的缓存
keyGenerator缓存数据时key生成策略
serialize缓存数据时value序列化策略
@Caching 定义复杂的缓存规则(方法上)
@Caching(
     cacheable = {
         @Cacheable(/*value="emp",*/key = "#lastName")
     },
     put = {
         @CachePut(/*value="emp",*/key = "#result.id"),
         @CachePut(/*value="emp",*/key = "#result.email")
     }
)
@CacheConfig 抽取缓存的公共配置(类上)
@CacheConfig(cacheNames="emp"/*,cacheManager = "employeeCacheManager"*/)
@Service
public class EmployeeService {
}

 

4.参数含义

5.默认缓存

* 原理:
*   1、自动配置类;CacheAutoConfiguration
*   2、缓存的配置类
*   org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.EhCacheCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.HazelcastCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.InfinispanCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.CouchbaseCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.CaffeineCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.GuavaCacheConfiguration
*   org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration【默认】
*   org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration
*   3、默认生效配置类:SimpleCacheConfiguration;
*   4、给容器中注册了一个CacheManager:ConcurrentMapCacheManager
*   5、可以获取和创建ConcurrentMapCache类型的缓存组件;他的作用将数据保存在ConcurrentMap中;

 

6.整合redis实现缓存

1).引入redis的starter
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2).配置连接

3).使用stringRedisTemplate 或 redisTemplate 操作redis

* Redis常见的五大数据类型
*  String(字符串)、List(列表)、Set(集合)、Hash(散列)、ZSet(有序集合)
*  stringRedisTemplate.opsForValue()[String(字符串)]
*  stringRedisTemplate.opsForList()[List(列表)]
*  stringRedisTemplate.opsForSet()[Set(集合)]
*  stringRedisTemplate.opsForHash()[Hash(散列)]
*  stringRedisTemplate.opsForZSet()[ZSet(有序集合)]

4).配置缓存序列化和缓存管理器

@Configuration
public class MyRedisConfig {

    @Bean
    public RedisTemplate<Object, Employee> empRedisTemplate(
            RedisConnectionFactory redisConnectionFactory)
            throws UnknownHostException {
        RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
        template.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer<Employee> ser = new Jackson2JsonRedisSerializer<Employee>(Employee.class);
        template.setDefaultSerializer(ser);
        return template;
    }


    //CacheManagerCustomizers可以来定制缓存的一些规则
    @Primary  //将某个缓存管理器作为默认的
    @Bean
    public RedisCacheManager employeeCacheManager(RedisTemplate<Object, Employee> empRedisTemplate){
        RedisCacheManager cacheManager = new RedisCacheManager(empRedisTemplate);
        //key多了一个前缀

        //使用前缀,默认会将CacheName作为key的前缀
        cacheManager.setUsePrefix(true);

        return cacheManager;
    }




}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
springboot整合ehcache+redis实现双缓存的过程如下[^1]: 1. 添加依赖:在项目的pom.xml文件中添加ehcache和redis的依赖。 2. 配置ehcache:在application.properties或application.yml文件中配置ehcache的相关属性,包括缓存的名称、最大缓存数量、缓存过期时间等。 3. 配置redis:在application.properties或application.yml文件中配置redis的相关属性,包括redis的地址、端口、密码等。 4. 创建缓存管理器:在Spring Boot的配置类中创建一个缓存管理器,用于管理ehcache和redis的缓存。 5. 使用缓存注解:在需要缓存的方法上添加缓存注解,例如@Cacheable、@CachePut等,指定缓存的名称和缓存的key。 6. 启动项目:运行Spring Boot的启动类,启动项目。 验证整个流程可以通过以下步骤进行: 1. 创建一个Controller类,在其中定义一个需要缓存的方法。 2. 在该方法上添加缓存注解,指定缓存的名称和缓存的key。 3. 启动项目,访问该方法,观察缓存是否生效。 示例代码如下: ```java // 引入相关的包 @RestController public class MyController { @Autowired private MyService myService; @GetMapping("/getData") @Cacheable(value = "myCache", key = "#param") public String getData(@RequestParam String param) { // 从数据库或其他数据源获取数据的逻辑 String data = myService.getDataFromDB(param); return data; } } @Service public class MyService { public String getDataFromDB(String param) { // 从数据库获取数据的逻辑 return "data from database"; } } ``` 相关问题: 1. 如何在Spring Boot中配置ehcache和redis? 2. 如何使用@Cacheable注解进行缓存? 3. 如何在Spring Boot中使用多个缓存管理器?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值