SpringBoot2整合Redis緩存

遵循SpringBoot三板斧第一步加依賴

<code>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-data-redis/<artifactid>
/<dependency>

<dependency>
<groupid>org.apache.commons/<groupid>
<artifactid>commons-pool2/<artifactid>
<version>2.6.0/<version>
/<dependency>/<code>

第二步寫註解

<code>@EnableCaching//開啟緩存支持/<code>

第三步寫配置

<code>spring:
redis:
database: 0
host: 192.168.1.11
port: 6379
password:
timeout: 600
lettuce:
pool:
max-active: 50
max-wait: -1
max-idle: 8
min-idle: 0/<code>

編寫Redis配置類

<code>/**
* @Author: zc
* @Date: 2019/11/3 14:12
* @Description: SpringBoot2.0 Redis緩存配置
* @EnableCaching:開啟緩存支持
*/
@Slf4j
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

@Value("${sys.dataCaching.expireTime:0}")
private int expireTime;

@Resource
private LettuceConnectionFactory lettuceConnectionFactory;

@Override
@Bean
public KeyGenerator keyGenerator() {//設置自定義key{ClassName + methodName + params}
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append(method.getName());
sb.append(",Params[");
for (int i = 0; i < params.length; i++) {
sb.append(params[i].toString());
if (i != (params.length - 1)) {
sb.append(",");
}
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}
//自定義keyGenerator,Key生成器
@Bean
public KeyGenerator updateByIdkeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append("getById");
sb.append(",Params[");
try {
Field id = params[0].getClass().getDeclaredField("id");
id.setAccessible(true);
sb.append(id.get(params[0]).toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}
//自定義keyGenerator,Key生成器
@Bean
public KeyGenerator deleteByIdkeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(",Method:");
sb.append("getById");
sb.append(",Params[");
for (int i = 0; i < params.length; i++) {
sb.append(params[i].toString());
if (i != (params.length - 1)) {
sb.append(",");
}
}
sb.append("]");
log.debug("Data Caching Redis Key : {}", sb.toString());
return sb.toString();
};
}


@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
//設置緩存過期時間
if (expireTime > 0) {
log.info("Redis 緩存過期時間 : {}", expireTime);
//設置緩存有效期 秒
redisCacheConfiguration.entryTtl(Duration.ofSeconds(expireTime));
} else {
log.info("Redis 未設置緩存過期時間");
}
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}

@Bean
public RedisTemplate<string> redisTemplate(RedisConnectionFactory factory) {//創建RedisTemplate
// 設置序列化
Jackson2JsonRedisSerializer<object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置redisTemplate
RedisTemplate<string> redisTemplate = new RedisTemplate<string>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
RedisSerializer> stringSerializer = new StringRedisSerializer();
// key序列化
redisTemplate.setKeySerializer(stringSerializer);
// value序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// Hash key序列化
redisTemplate.setHashKeySerializer(stringSerializer);
// Hash value序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}/<string>/<string>/<object>/<object>/<string>/<code>

如何使用查詢緩存

<code>@CacheConfig(cacheNames = "demoDao")
@Component
public class DemoDao implements IDemoDAO<> {
@Autowired
DemoMapper mapper;

//用默認配置的keyGenerator
@Cacheable
@Override
public Demo getById(Integer id) {
return mapper.getById(id);
}
//使用配置的keyGenerator,清空緩存
@CacheEvict(keyGenerator = "updateByIdkeyGenerator")
@Override
public int update(T entity) {
return mapper.update(entity);
}
//使用配置的keyGenerator,清空緩存
@CacheEvict(keyGenerator = "deleteByIdkeyGenerator")
@Override
public int deleteById(Integer id) {
return mapper.deleteById(id);
}
}/<code>

https://zc.happyloves.cn:4443/wordpress/


分享到:


相關文章: