springboot整合redis及其註解式開發
springboot整合redis
匯入pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
yml配置
spring:
redis:
database: 0
host: xxx
port: 6379
password: 123456
jedis:
pool:
max-active: 100
max-idle: 3
max-wait: -1
min-idle: 0
timeout: 1000
建立RedisConfig
RedisConfig類用於Redis資料快取
package com.xiaoyang.springbootmybatis.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.lang.reflect.Method;
import java.time.Duration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* redis配置類
**/
@Configuration
@EnableCaching//開啟註解式快取
//繼承CachingConfigurerSupport,為了自定義生成KEY的策略。可以不繼承。
public class RedisConfig extends CachingConfigurerSupport {
/**
* 生成key的策略 根據類名+方法名+所有引數的值生成唯一的一個key
*
* @return
*/
@Bean
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
/**
* 管理快取
*
* @param redisConnectionFactory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//通過Spring提供的RedisCacheConfiguration類,構造一個自己的redis配置類,從該配置類中可以設定一些初始化的快取名稱空間
// 及對應的預設過期時間等屬性,再利用RedisCacheManager中的builder.build()的方式生成cacheManager:
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 生成一個預設配置,通過config物件即可對快取進行自定義配置
config = config.entryTtl(Duration.ofMinutes(1)) // 設定快取的預設過期時間,也是使用Duration設定
.disableCachingNullValues(); // 不快取空值
// 設定一個初始化的快取空間set集合
Set<String> cacheNames = new HashSet<>();
cacheNames.add("my-redis-cache1");
cacheNames.add("my-redis-cache2");
// 對每個快取空間應用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
configMap.put("my-redis-cache1", config);
configMap.put("my-redis-cache2", config.entryTtl(Duration.ofSeconds(120)));
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory) // 使用自定義的快取配置初始化一個cacheManager
.initialCacheNames(cacheNames) // 注意這兩句的呼叫順序,一定要先呼叫該方法設定初始化的快取名,再初始化相關的配置
.withInitialCacheConfigurations(configMap)
.build();
return cacheManager;
}
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
//使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值(預設使用JDK的序列化方式)
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
//使用StringRedisSerializer來序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(factory);
return stringRedisTemplate;
}
}
@Configuration
@Configuration底層是含有@Component ,所以@Configuration 具有和 @Component 的作用。
@Configuration可理解為用spring的時候xml裡面的<beans>標籤。
注:
1) 配置類必須以類的形式提供(不能是工廠方法返回的例項),允許通過生成子類在執行時增強(
cglib 動態代理)。
2) 配置類不能是 final 類(沒法動態代理)。
3) 配置註解通常為了通過 @Bean 註解生成 Spring 容器管理的類。
4) 配置類必須是非本地的(即不能在方法中宣告,不能是 private)。
5) 任何巢狀配置類都必須宣告為static。
6) @Bean方法不能建立進一步的配置類(也就是返回的bean如果帶有@Configuration,
也不會被特殊處理,只會作為普通的 bean)。
@EnableCaching
1) @EnableCaching註解是spring framework中的註解驅動的快取管理功能。
自spring版本3.1起加入了該註解。
2) 如果你使用了這個註解,那麼你就不需要在XML檔案中配置cache manager了。
3) 當你在配置類(@Configuration)上使用@EnableCaching註解時,會觸發一個post processor,
這會掃描每一個spring bean,檢視是否已經存在註解對應的快取。如果找到了,
就會自動建立一個代理攔截方法呼叫,使用快取的bean執行處理。
@Bean
@Bean可理解為用spring的時候xml裡面的<bean>標籤。
注:
1) @Bean註解在返回例項的方法上,如果未通過@Bean指定bean的名稱,則預設與標註的方法名相同;
2) @Bean註解預設作用域為單例singleton作用域,可通過@Scope(“prototype”)設定為原型作用域;
3) 既然@Bean的作用是註冊bean物件,那麼完全可以使用@Component、
@Controller、@Service、@Repository等註解註冊bean(在需要註冊的類上加註解),
當然需要配置@ComponentScan註解進行自動掃描。
名字my-redis-cache1和my-redis-cache2為兩個快取槽
結合註解開發
@Cacheable:作用是主要針對方法配置,能夠根據方法的請求引數對其結果進行快取
主要引數說明:
1) value :
快取的名稱,在 spring 配置檔案中定義,必須指定至少一個,
例如:@Cacheable(value=”mycache”) 或者 @Cacheable(value={”cache1”,”cache2”}。
2) key :快取的 key,可以為空,
如果指定要按照 SpEL 表示式編寫,如果不指定,則預設按照方法的所有引數進行組合,
例如:@Cacheable(value=”testcache”,key=”#userName”)。
3) condition :快取的條件,可以為空
@CachePut:作用是主要針對方法配置,能夠根據方法的請求引數對其結果進行快取,
和 @Cacheable 不同的是,它每次都會觸發真實查詢
方法的呼叫
主要引數說明:
引數配置和@Cacheable一樣。
@CacheEvict:作用是主要針對方法配置,能夠根據一定的條件對快取進行清空
相關文章
- SpringBoot整合Redis開發Spring BootRedis
- Redis詳解 - SpringBoot整合Redis,RedisTemplate和註解兩種方式的使用RedisSpring Boot
- SpringBoot整合Redis開發RESTful API介面Spring BootRedisRESTAPI
- springboot整合redis詳解Spring BootRedis
- springboot整合redis2.x,使用spring註解進行快取Spring BootRedis快取
- SpringBoot 註解呼叫Redis快取Spring BootRedis快取
- springboot整合redis?Spring BootRedis
- SpringBoot 整合 RedisSpring BootRedis
- 【SpringBoot】整合RedisSpring BootRedis
- SpringBoot整合RedisSpring BootRedis
- springboot註解方式使用redis快取Spring BootRedis快取
- springboot整合ES及其基本使用Spring Boot
- springboot整合mybatis及其反向工程Spring BootMyBatis
- SpringBoot註解最全詳解(整合超詳細版本)Spring Boot
- SpringBoot開發案例之整合Dubbo分散式服務Spring Boot分散式
- 搞懂分散式技術14:Spring Boot使用註解整合Redis快取分散式Spring BootRedis快取
- SpringBoot+Dubbo的註解方式整合例項Spring Boot
- SpringBoot整合Redis快取Spring BootRedis快取
- SpringBoot整合Redis實戰Spring BootRedis
- redis整合springboot的helloworldRedisSpring Boot
- SpringBoot整合Redis亂碼原因及解決方案Spring BootRedis
- SpringBoot註解使用redis做快取總結Spring BootRedis快取
- [Redis 客戶端整合] SpringBoot 整合 LettuceRedis客戶端Spring Boot
- [Redis 客戶端整合] SpringBoot 整合 JedisRedis客戶端Spring Boot
- SpringBoot快速整合Mybatis(去XML化+註解進階)Spring BootMyBatisXML
- SpringBoot資料訪問之整合mybatis註解版Spring BootMyBatis
- springboot整合dubbo,redis,jwt,atomikosSpring BootRedisJWT
- SpringBoot資料訪問(三) SpringBoot整合RedisSpring BootRedis
- SpringBoot註解Spring Boot
- SpringBoot整合Redis及Redis工具類撰寫Spring BootRedis
- 【SpringBoot系列】SpringBoot註解詳解Spring Boot
- SpringBoot整合Dubbo,註冊中心nacosSpring Boot
- SpringBoot中整合Redis(快取篇)Spring BootRedis快取
- 介紹SpringBoot 整合 Redis 快取Spring BootRedis快取
- springboot整合redis,redisTemplate 空指標Spring BootRedis指標
- SpringBoot開發祕籍 - 整合Graphql QuerySpring Boot
- 註解開發
- SpringBoot 註解@ConfiguretionPropertiesSpring Boot