Springbootはredisを統合し、spring-data-redis 2を使用する.0の同時使用jedis
7453 ワード
最新バージョンのspring-data-redisは煩わしく、以前は便利だった方法が古くなったことが多い.以下は2.0というバージョンの構築プロセスです.
まずこのバージョンについて
(1)spring-data-redisはデフォルトでlettuceで、jedisでは単独で構成する必要があります
(2)JedisConnectionFactoryのすべてのsetメソッドはすべて時代遅れである.
(3)基本構成(host,port...)redisstandaloneconfiguration,pooでプールを接続するという構成用jedispoolconfig
(4)独自のシーケンス化クラスがあり、カスタマイズ不要
次はコードを貼って、これはjedisにしか適用されないことに注意して、jedisを使わないならば、lettuceで基本的に何も配置しなくてもいいです
pom.xml
まずこのバージョンについて
(1)spring-data-redisはデフォルトでlettuceで、jedisでは単独で構成する必要があります
(2)JedisConnectionFactoryのすべてのsetメソッドはすべて時代遅れである.
(3)基本構成(host,port...)redisstandaloneconfiguration,pooでプールを接続するという構成用jedispoolconfig
(4)独自のシーケンス化クラスがあり、カスタマイズ不要
次はコードを貼って、これはjedisにしか適用されないことに注意して、jedisを使わないならば、lettuceで基本的に何も配置しなくてもいいです
pom.xml
redis.clients
jedis
org.springframework.boot
spring-boot-starter-data-redis
。。。
application.yml
spring:
redis:
database: 5
host: 127.0.0.1
port: 6379
timeout: 3000ms
jedis:
pool:
max-idle: 500
min-idle: 50
max-active: 2000
max-wait: 1000ms
jedisConfig.java
package cn.cnm.springboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties
public class JedisConfig {
@Value("${spring.redis.host}")
public String host;
@Value("${spring.redis.port}")
public int port;
@Value("${spring.redis.database}")
public int database;
@Value("${spring.redis.jedis.pool.max-idle}")
public int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
public int minIdle;
@Value("${spring.redis.jedis.pool.max-active}")
public int maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
public String maxWait;
@Value("${spring.redis.timeout}")
public String timeout;
}
RedisConfig.java
package cn.cnm.springboot;
import cn.cnm.springboot.util.MyRedisSerializer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.data.redis.JedisClientConfigurationBuilderCustomizer;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
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.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.time.Duration;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Autowired
JedisConfig jedisConfig;
@Autowired
JedisConnectionFactory jedisConnectionFactory;
@Bean
public JedisConnectionFactory jedisConnectionFactory (){
RedisStandaloneConfiguration rf=new RedisStandaloneConfiguration();
rf.setDatabase(jedisConfig.database);
rf.setHostName(jedisConfig.host);
rf.setPort(jedisConfig.port);
int to=Integer.parseInt(jedisConfig.timeout.substring(0,jedisConfig.timeout.length()-2));
//JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
//jedisClientConfiguration.connectTimeout(Duration.ofMillis(to));
JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpb=
(JedisClientConfiguration.JedisPoolingClientConfigurationBuilder)JedisClientConfiguration.builder();
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
jedisPoolConfig.setMaxIdle(jedisConfig.maxIdle);
jedisPoolConfig.setMinIdle(jedisConfig.minIdle);
jedisPoolConfig.setMaxTotal(jedisConfig.maxActive);
int l=Integer.parseInt(jedisConfig.maxWait.substring(0,jedisConfig.maxWait.length()-2));
jedisPoolConfig.setMaxWaitMillis(l);
jpb.poolConfig(jedisPoolConfig);
JedisConnectionFactory jedisConnectionFactory=new JedisConnectionFactory(rf,jpb.build());
return jedisConnectionFactory;
}
@Bean
public RedisTemplate redisTemplate(){
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);
RedisTemplate rt=new RedisTemplate();
rt.setConnectionFactory(jedisConnectionFactory);
System.out.println(jedisConnectionFactory.getPoolConfig().getMaxIdle());
System.out.println(jedisConnectionFactory.getPoolConfig().getMinIdle());
System.out.println(jedisConnectionFactory.getPoolConfig().getMaxTotal());
RedisSerializer rs=new StringRedisSerializer();
rt.setKeySerializer(rs);
rt.setValueSerializer(jackson2JsonRedisSerializer);
rt.setHashKeySerializer(rs);
rt.setHashValueSerializer(jackson2JsonRedisSerializer);
rt.afterPropertiesSet();
return rt;
}
}
1. pool , timeout
2.JedisPoolingClientConfigurationBuilder poolConfig GenericObjectPoolConfig, GenericObjectPoolConfig pool , JedisPoolConfig ( GenericObjectPoolConfig) 。
3. key StringRedisSerializer value Jackson2JsonRedisSerializer
4. RedisStringTemplate , RedisTemplate
, RedisTemplate , 。
, , yml ,redistemplate , redistemplate