springboot 使用@EnableCaching開啟cache功能,通過@Cacheable @CachePut等一些注解使得用戶可以方便的使用cache,cache其實(shí)就是一個(gè)緩存數(shù)據(jù)的地方,就是一塊內(nèi)存,這塊內(nèi)存的組織形式可以有很多,
網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)建站把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!可以是hashmap或者是redis等等,springboot 提供了兩個(gè)接口來管理cache,CacheManager和Cache,
CacheManager
只是提供兩個(gè)方法,用于獲取Cache的實(shí)現(xiàn)類
,
Cache的實(shí)現(xiàn)類
則是真正對(duì)cache的抽象。在springboot中提供了一些cache的實(shí)現(xiàn)方式,如下
Generic
JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, etc)
EhCache 2.x
Hazelcast
Infinispan
Couchbase
Redis
Caffeine
Guava (deprecated)
Simple
在springboot中關(guān)于cache提供了以上那些方式的配置類,比如redis是RedisCacheConfiguration,這些配置類會(huì)按順序被掃描,當(dāng)然這些配置類被加載是有條件的,如果這些配置類由于條件所限都沒能加載,系統(tǒng)默認(rèn)選擇SimpleCacheConfiguration,因?yàn)槿绻蠹业臈l件都不滿足時(shí),它的條件就滿足了。如果想使用redis作為緩存,需要加入以下依賴:
然后RedisCacheConfiguration條件中需要的jar就會(huì)被加載了,此時(shí)cacheManger的實(shí)現(xiàn)類就是RedisCacheManager了,由于spring容器中有了cacheManger,排在后面的實(shí)現(xiàn)就不會(huì)加載了,因?yàn)樗麄兊募虞d條件中都有@ConditionalOnMissingBean(CacheManager.class)。處理添加依賴,還需要在application.properties中寫入redis的相關(guān)配置,比如:
# Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口
spring.redis.port=6379
# Redis服務(wù)器連接密碼(默認(rèn)為空)
spring.redis.password=
# 連接池大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.pool.max-active=8
# 連接池大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
spring.redis.pool.max-wait=-1
# 連接池中的大空閑連接
spring.redis.pool.max-idle=8
# 連接池中的最小空閑連接
spring.redis.pool.min-idle=0
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=0
之后redis cache就可以使用了,但這里有個(gè)問題,如果想通過redis客戶的查看寫到redis里的內(nèi)容時(shí)會(huì)出現(xiàn)\xab\xa0之類的數(shù)據(jù),而不是我們表面通過@cacheput或@cahceable中定義的key 和value,這個(gè)問題的根因是redis的序列化問題,springboot提供的RedisTemplate里的keySerializer valueSerializer等是JdkSerializationRedisSerializer,該類是把object串行化為byte,也就是如果用@cahceput寫入的key是int類型,他會(huì)先把int變?yōu)榘b類,然后串行化為byte寫入redis,所以會(huì)看到\xab\xa0之類的數(shù)據(jù),這些都是object串行化之后的結(jié)果。如果想看到正常的數(shù)據(jù)就需要自己寫一個(gè)配置類,里面定義自己的RedisTemplatebean,然后配置keySerializer valueSerializer,例如:
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisTemplate, ?> redisTemplate) {
RedisCacheManager manager = new RedisCacheManager(redisTemplate);
manager.setDefaultExpiration(20);//設(shè)置默認(rèn)過期時(shí)間
return manager;
}
@Bean
public RedisTemplate
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。