<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
新增RedisConfig.java
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Autowired
private RedisProperties redisProperties;
/** JEDIS默认槽 **/
public static final int MASTER_REDIS_INDEX = 2;
@Bean
public KeyGenerator keyGenerator() {
return (target, method, 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();
};
}
/**
* redis缓存管理器
*/
@Bean
@Primary
public CacheManager cacheManager(RedisConnectionFactory factory) {
return RedisCacheManager.builder(factory)
.cacheDefaults(this.cacheConfiguration(Duration.ofHours(6)))
.withInitialCacheConfigurations(this.cacheConfigurationMap())
.build();
}
/**
* redis缓存管理器配置列表;
* 可以根据业务需要配置不同的过期时间;
*/
private Map<String, RedisCacheConfiguration> cacheConfigurationMap() {
Map<String, RedisCacheConfiguration> configurationMap = new HashMap<>();
configurationMap.put("tokenInfo", this.cacheConfiguration(Duration.ofSeconds(21600L)));
configurationMap.put("online", this.cacheConfiguration(Duration.ofSeconds(1800L)));
configurationMap.put("userInfo", this.cacheConfiguration(Duration.ofSeconds(21600L)));
configurationMap.put("user_ext", this.cacheConfiguration(Duration.ofSeconds(21600L)));
configurationMap.put("userBank", this.cacheConfiguration(Duration.ofSeconds(21600L)));
configurationMap.put("open_info_cur", this.cacheConfiguration(Duration.ofSeconds(5L)));
configurationMap.put("lottery_info", this.cacheConfiguration(Duration.ofSeconds(1800L)));
configurationMap.put("input_result_ft", this.cacheConfiguration(Duration.ofSeconds(3600L)));
configurationMap.put("input_result_bk", this.cacheConfiguration(Duration.ofSeconds(3600L)));
return configurationMap;
}
/**
* redis缓存管理器的默认配置;
* @param ttl 设置默认的过期时间,防止 redis 内存泄漏
*/
private RedisCacheConfiguration cacheConfiguration(Duration ttl) {
RedisSerializer<String> redisSerializer = new StringRedisSerializer();
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
RedisCacheConfiguration config=RedisCacheConfiguration.defaultCacheConfig();
config= config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer));
return config.entryTtl(ttl).disableCachingNullValues().
computePrefixWith(s -> s+"_");
}
@Bean
public RedisTemplate<String, Object> redisTemplate(@Qualifier("jedisConnectionFactory")JedisConnectionFactory connectionFactory) {
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(jackson2JsonRedisSerializer);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
// RedisUtil.setRedisTemplate(template);
// RedisMsg.setRedisTemplate(template);
return template;
}
@Bean
public StringRedisTemplate stringRedisTemplate(@Qualifier("jedisConnectionFactory")JedisConnectionFactory connectionFactory) {
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(jackson2JsonRedisSerializer);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
@Bean("jedisConnectionFactory")
JedisConnectionFactory jedisConnectionFactory(){
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisProperties.getHost());
redisStandaloneConfiguration.setPort(redisProperties.getPort());
redisStandaloneConfiguration.setDatabase(MASTER_REDIS_INDEX);
redisStandaloneConfiguration.setPassword(redisProperties.getPassword());
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcf = (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
//修改我们的连接池配置
jpcf.poolConfig(jedisPoolConfig());
//通过构造器来构造jedis客户端配置
JedisClientConfiguration jedisClientConfiguration = jpcf.build();
return new JedisConnectionFactory(redisStandaloneConfiguration,jedisClientConfiguration);
}
/**
* 连接池配置信息
*/
@Bean
public JedisPoolConfig jedisPoolConfig(){
return new JedisPoolConfig();
}
@Bean
RedisSentinelConfiguration getSentinelConfig() {
Sentinel sentinelProperties = redisProperties.getSentinel();
if (sentinelProperties != null) {
RedisSentinelConfiguration config = new RedisSentinelConfiguration();
config.master(sentinelProperties.getMaster());
config.setSentinels(this.createSentinels(sentinelProperties));
return config;
} else {
return null;
}
}
private List<RedisNode> createSentinels(Sentinel sentinel) {
ArrayList<RedisNode> sentinels = new ArrayList<>();
String nodes = sentinel.getNodes().get(0); //String nodes = sentinel.getNodes()
String[] var4 = StringUtils.commaDelimitedListToStringArray(nodes);
for (String node : var4) {
try {
String[] ex = StringUtils.split(node, ":");
assert ex != null;
sentinels.add(new RedisNode(ex[0], Integer.parseInt(ex[1])));
} catch (RuntimeException var9) {
throw new IllegalStateException("Invalid redis sentinel property '" + node + "'", var9);
}
}
return sentinels;
}
@Bean
CountDownLatch latch() {
return new CountDownLatch(1);
}
}
这时候来看如何使用
@Caching(put = {
@CachePut(value = {"tokenInfo"},key = "'admin_' + #result.uid",condition = "#result != null"),
@CachePut(value = {"online"}, key = "'admin_' + #result.uid", condition = "#result != null")
})
public TokenInfo login(String account, String password, String requestIp, UserEquipmentVO equipment) throws Exception, TransactionException {
Admin admin = this.adminDao.get(account);
return admin;
}
该方法返回不为空则会自动添加到redis里面去。