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;
    }




}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值