一起來(lái)看看springboot集成redis的使用注解
redis簡(jiǎn)介:
Redis是當(dāng)前比較熱門(mén)的NOSQL系統(tǒng)之一,它是一個(gè)開(kāi)源的使用ANSI c語(yǔ)言編寫(xiě)的key-value存儲(chǔ)系統(tǒng) (區(qū)別于MySQL的二維表格的形式存儲(chǔ)。)。和Memcache類(lèi)似,但很大程度補(bǔ)償了Memcache的不 足。和Memcache一樣,Redis數(shù)據(jù)都是緩存在計(jì)算機(jī)內(nèi)存中,不同的是,Memcache只能將數(shù)據(jù)緩存到 內(nèi)存中,無(wú)法自動(dòng)定期寫(xiě)入硬盤(pán),這就表示,一斷電或重啟,內(nèi)存清空,數(shù)據(jù)丟失。所以Memcache的 應(yīng)用場(chǎng)景適用于緩存無(wú)需持久化的數(shù)據(jù)。而Redis不同的是它會(huì)周期性的把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者把修 改操作寫(xiě)入追加的記錄文件,實(shí)現(xiàn)數(shù)據(jù)的持久化。 Redis的特點(diǎn): 1,Redis讀取的速度是110000次/s,寫(xiě)的速度是81000次/s; 2,原子 。Redis的所有操作都是原子性的,同時(shí)Redis還支持對(duì)幾個(gè)操作全并后的原子性執(zhí)行。 3,支持多種數(shù)據(jù)結(jié)構(gòu):string(字符串);list(列表);hash(哈希),set(集合);zset(有序集合) 4,持久化,集群部署 5,支持過(guò)期時(shí)間,支持事務(wù),消息訂閱
引入依賴(lài):
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- spring2.X集成redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.6.0</version> </dependency>
編寫(xiě)application.properties文件
#redi配置 spring.redis.host=ip地址 spring.redis.port=端口號(hào) spring.redis.database=0 spring.redis.password=密碼 spring.redis.lettuce.pool.max-active=20 spring.redis.lettuce.pool.max-wait=1 #最大阻塞等待時(shí)間(負(fù)數(shù)表示沒(méi)有限制) spring.redis.lettuce.pool.max-idle=5 spring.redis.lettuce.pool.min-idle=0 # 關(guān)閉超時(shí)時(shí)間 spring.redis.lettuce.shutdown-timeout=100
編寫(xiě)配置類(lèi):
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory
factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new
Jackson2JsonRedisSerializer(Object.class);
//解決查詢(xún)緩存轉(zhuǎn)換異常的問(wèn)題
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置序列化(解決亂碼的問(wèn)題),過(guò)期時(shí)間600秒
RedisCacheConfiguration config =
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(600))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redi
sSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(ja
ckson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
springboot的redis注解介紹
(1)緩存@Cacheable
根據(jù)方法對(duì)其返回結(jié)果進(jìn)行緩存,下次請(qǐng)求時(shí),如果緩存存在,則直接讀取緩存數(shù)據(jù)返回;如果緩存不存在,則執(zhí)行方法,并把返回的結(jié)果存入緩存中。一般用在查詢(xún)方法上。
查看源碼,屬性值如下:

(2)緩存@CachePut
使用該注解標(biāo)志的方法,每次都會(huì)執(zhí)行,并將結(jié)果存入指定的緩存中。其他方法可以直接從響應(yīng)的緩存中讀取緩存數(shù)據(jù),而不需要再去查詢(xún)數(shù)據(jù)庫(kù)。一般用在新增方法上。
查看源碼,屬性值如下

(3)緩存@CacheEvict
使用該注解標(biāo)志的方法,會(huì)清空指定的緩存。一般用在更新或者刪除方法上查看源碼,屬性值如下


不能連接redis: (1)關(guān)閉liunx防火墻 (2)找到redis配置文件: 修改 protected-mode yes 改為 protected-mode no 注釋掉: bind 127.0.0.1
測(cè)試
@Cacheable(value = "banner", key = "'selectIndexList'")
@Override
public List<CrmBanner> selectIndexList() {
List<CrmBanner> list = baseMapper.selectList(new
QueryWrapper<CrmBanner>().orderByDesc("sort"));
return list;
}
@CacheEvict(value = "banner", allEntries=true)
@Override
public void removeBannerById(String id) {
baseMapper.deleteById(id);
}
redis中:

基本的功能:
查詢(xún)使用:@Cacheable注解
修改刪除:使用@CacheEvict注解
增加:使用@CachePut注解
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
去掉IntelliJ IDEA 中 mybatis 對(duì)應(yīng)的 xml 文件警告的教程圖解
本文通過(guò)圖文并茂的形式給大家介紹了去掉IntelliJ IDEA 中 mybatis 對(duì)應(yīng)的 xml 文件警告的教程,需要的朋友可以參考下2018-06-06
springboot項(xiàng)目不同環(huán)境的配置讀取方式
SpringBoot支持application.properties、application.yml、application.yaml三種配置文件類(lèi)型,可同時(shí)存在并合并配置,配置文件的讀取優(yōu)先級(jí)為:application.properties > application.yml > application.yaml,不同位置的相同類(lèi)型配置文件2024-11-11
java 使用ElasticSearch完成百萬(wàn)級(jí)數(shù)據(jù)查詢(xún)附近的人功能
本篇文章主要介紹了java 使用ElasticSearch完成百萬(wàn)級(jí)數(shù)據(jù)查詢(xún)附近的人功能,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
SpringBoot實(shí)現(xiàn)分布式驗(yàn)證碼登錄方案小結(jié)
驗(yàn)證碼登錄作為一種有效的防護(hù)手段,可以防止惡意gongji、暴力pojie等,本文主要介紹了SpringBoot實(shí)現(xiàn)分布式驗(yàn)證碼登錄方案小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
Springboot注入成員變量HttpServletRequest的原理分析
這篇文章主要介紹了Springboot注入成員變量HttpServletRequest的原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java實(shí)現(xiàn)不同的類(lèi)的屬性之間相互賦值
今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)不同的類(lèi)的屬性之間相互賦值,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03

