com.yuweix.kuafu.data.springboot.jedis.JedisConf Maven / Gradle / Ivy
The newest version!
package com.yuweix.kuafu.data.springboot.jedis;
import com.yuweix.kuafu.core.json.Json;
import com.yuweix.kuafu.data.cache.redis.jedis.JedisCache;
import com.yuweix.kuafu.data.serializer.JsonSerializer;
import com.yuweix.kuafu.data.serializer.Serializer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
* 单实例redis
* @author yuwei
*/
public class JedisConf {
@Bean(name = "jedisPoolConfig")
public JedisPoolConfig jedisPoolConfig(@Value("${kuafu.redis.pool.max-total:20}") int maxTotal
, @Value("${kuafu.redis.pool.max-idle:10}") int maxIdle
, @Value("${kuafu.redis.pool.min-idle:10}") int minIdle
, @Value("${kuafu.redis.pool.max-wait-millis:10000}") long maxWaitMillis
, @Value("${kuafu.redis.pool.test-on-borrow:false}") boolean testOnBorrow) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(maxTotal);
config.setMaxIdle(maxIdle);
config.setMinIdle(minIdle);
config.setMaxWaitMillis(maxWaitMillis);
config.setTestOnBorrow(testOnBorrow);
return config;
}
@Bean(name = "redisStandaloneConfiguration")
public RedisStandaloneConfiguration redisStandaloneConfiguration(@Value("${kuafu.redis.host:}") String host
, @Value("${kuafu.redis.port:0}") int port
, @Value("${kuafu.redis.db-index:0}") int dbIndex
, @Value("${kuafu.redis.need-password:false}") boolean needPassword
, @Value("${kuafu.redis.password:}") String password) {
RedisStandaloneConfiguration conf = new RedisStandaloneConfiguration();
conf.setHostName(host);
if (port > 0) {
conf.setPort(port);
}
if (dbIndex > 0) {
conf.setDatabase(dbIndex);
}
if (needPassword) {
conf.setPassword(RedisPassword.of(password));
}
return conf;
}
@Bean(name = "jedisConnectionFactory")
public JedisConnectionFactory jedisConnectionFactory(@Qualifier("jedisPoolConfig") JedisPoolConfig jedisPoolConfig
, @Qualifier("redisStandaloneConfiguration") RedisStandaloneConfiguration config) {
JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder().usePooling().poolConfig(jedisPoolConfig).build();
return new JedisConnectionFactory(config, jedisClientConfiguration);
}
@Bean(name = "redisTemplate")
public RedisTemplate redisTemplate(@Qualifier("jedisConnectionFactory") RedisConnectionFactory connFactory) {
RedisSerializer redisSerializer = new StringRedisSerializer();
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(connFactory);
template.setKeySerializer(redisSerializer);
template.setValueSerializer(redisSerializer);
template.setEnableDefaultSerializer(true);
// template.setEnableTransactionSupport(true);
return template;
}
@ConditionalOnMissingBean(RedisMessageListenerContainer.class)
@Bean
public RedisMessageListenerContainer messageContainer(@Qualifier("jedisConnectionFactory") RedisConnectionFactory connFactory) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connFactory);
return container;
}
@ConditionalOnMissingBean(Serializer.class)
@Bean
public Serializer cacheSerializer(Json json) {
return new JsonSerializer(json);
}
@ConditionalOnMissingBean(name = "redisCache")
@Bean(name = "redisCache")
public JedisCache redisCache(@Qualifier("redisTemplate") RedisTemplate template
, Serializer serializer
, RedisMessageListenerContainer messageContainer) {
JedisCache cache = new JedisCache(template, serializer);
cache.setMessageContainer(messageContainer);
return cache;
}
}