SpringCache

SpringCache

码农世界 2024-05-15 前端 60 次浏览 0个评论

1、引入依赖

		
            org.springframework.boot
            spring-boot-starter-cache
        

2、配置

spring:
  cache:
    type: redis
    redis:
      time-to-live: 60000
      key-prefix: CACHE_
      use-key-prefix: true
      cache-null-values: true # 是否缓存空值

3、配置序列化

@EnableConfigurationProperties(CacheProperties.class)
@EnableCaching // 开启缓存
@Configuration
public class MyCacheConfig {
    @Bean
    RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(
                new GenericJackson2JsonRedisSerializer()));
		// 以下代码保证在 application.yml 里设置的配置生效
        CacheProperties.Redis redisProperties = cacheProperties.getRedis();
        if (redisProperties.getTimeToLive() != null) {
            config = config.entryTtl(redisProperties.getTimeToLive());
        }
        if (redisProperties.getKeyPrefix() != null) {
            config = config.prefixKeysWith(redisProperties.getKeyPrefix());
        }
        if (redisProperties.isCacheNullValues()) {
            config = config.disableCachingNullValues();
        }
        if (redisProperties.isUseKeyPrefix()) {
            config = config.disableKeyPrefix();
        }
        return config;
    }
}

4、使用

// 代表当前方法的结果需要缓存
@Cacheable(value = {"category"}, key = "'level1Categorys'")
@Cacheable(value = {"category"}, key = "#root.method.name") // key 命令为方法名
@Cacheable(value = {"category"}, key = "'getLevel1Categorys'", sync = true) // sync 通过 synchronized 加锁解决缓存击穿问题
// 使缓存失效
@CacheEvict(value = "category", key = "'getLevel1Categorys'") 
// 多个操作
@Caching(evict = {
            @CacheEvict(value = "category", key = "'getLevel1Categorys'"),
            @CacheEvict(value = "category", key = "'getCatalogJson'")
    })
// 删除整个分区
@CacheEvict(value = "category", allEntries = true)
// 双写模式
@CachePut

转载请注明来自码农世界,本文标题:《SpringCache》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,60人围观)参与讨论

还没有评论,来说两句吧...

Top