<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
<!-- 引入redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
<!-- 引入SpringCache --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency>
自動設定
CacheAutoConfiguration會匯入 RedisCacheConfiguration;自動設定好了快取管理器RedisCacheManager
設定使用redis作為快取
spring.cache.type=redis
/** * 1、每一個需要快取的資料我們都來指定要放到哪個名字的快取。【快取的分割區(按照業務型別分)】 * 2、@Cacheable({"category"}) * 代表當前方法的結果需要快取,如果快取中有,方法不再呼叫。 * 如果快取中沒有,會呼叫方法,最後將方法的結果放入快取。 * 3、預設行為 * 1)、如果快取中有,方法不用呼叫。 * 2)、key預設自動生成:格式:快取的名字::SimpleKey [](自主生成的key值) 例:category::SimpleKey [] * 3)、快取的value值,預設使用jdk序列化機制。將序列化後的資料存到redis * 4)、預設ttl時間:-1; * * 自定義: * 1)、指定生成的快取使用的key key屬性指定,接受一個SpEl @Cacheable(value = {"category"}, key = "#root.method.name") key的SpEl可以參考:https://docs.spring.io/spring-framework/docs/5.2.19.RELEASE/spring-framework-reference/integration.html#cache-spel-context * 2)、指定快取的資料的存活時間 spring.cache.redis.time-to-live=3600000 * 3)、將資料儲存為json格式 * * * @return */ @Cacheable(value = {"category"}, key = "#root.method.name") @Override public List<CategoryEntity> findCatelog1() { System.out.println("查詢資料庫---"); return baseMapper.selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", 0)); }
指定快取資料的存活時間
spring.cache.redis.time-to-live=3600000
將資料儲存為json格式:設定
@EnableConfigurationProperties(CacheProperties.class) @Configuration @EnableCaching // 開啟快取 public class MyCacheConfig { /** * 組態檔中的東西沒有用上 * * 1、原來和組態檔繫結的設定類是這樣的 * @ConfigurationProperties(prefix = "spring.cache") * public class CacheProperties * * 2、要讓他生效 * @EnableConfigurationProperties(CacheProperties.class) * @return */ @Bean public RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())); config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); // 將組態檔中的所有設定都生效 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; } }
快取的其他自定義設定
# 如果指定了字首就用我們指定的字首,如果沒有就預設使用快取的名字作為字首 # spring.cache.redis.key-prefix=CACHE_ # 預設就使用分割區名 spring.cache.redis.use-key-prefix=true # 是否快取空值。防止快取穿透 spring.cache.redis.cache-null-values=true
資料一致性中的失效模式
/** * 使用失效模式:先刪除快取,在存取系統獲得快取 * findCatelog1:快取時的key名 * value = "category" 需要與快取時的名稱相同 * 儲存同一個型別的資料,都可以指定成同一個分割區。分割區名預設就是快取的字首 */ // @CacheEvict(value = "category", key = "'findCatelog1'")// 刪除具體key的快取 @CacheEvict(value = "category", allEntries = true)// 指定刪除某個分割區下的所有資料 @Transactional @Override public void updateCascade(CategoryEntity category) { this.updateById(category); categoryBrandRelationService.updateCategory(category.getCatId(), category.getName()); }
資料一致性中的雙寫模式,使用@CachePut註解
/** * @CacheEvict: 失效模式:先刪除快取,在存取系統獲得快取 * 1、同時進行多種快取操作 @Caching * 2、指定刪除某個分割區下的所有資料 * @param category */ @Caching(evict = { @CacheEvict(value = "category", key = "'findCatelog1'"),// 刪除快取 @CacheEvict(value = "category", key = "'getCatalogJson'"),// 刪除快取 }) @Transactional @Override public void updateCascade(CategoryEntity category) { this.updateById(category); categoryBrandRelationService.updateCategory(category.getCatId(), category.getName()); }
資料一致性中的雙寫模式
@CachePut // 雙寫模式時使用
@Cacheable(value = {"category"}, key = "#root.method.name", sync = true)
sync = true 相當於是加本地鎖,可以用來解決擊穿問題
常規資料(讀多寫少,即時性,一致性要求不高的資料),完全可以使用Spring-Cache。寫模式:只要快取的資料有過期時間就足夠了
到此這篇關於SpringBoot2.X整合Spring-Cache快取開發的實現的文章就介紹到這了,更多相關SpringBoot Spring-Cache快取 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45