Oleh kerana artikel ini tidak memperkenalkan pembinaan kluster Redis
, di sini kami menganggap bahawa kami sudah mempunyai persekitaran kluster Redis Kami perlu melaraskan bahagian berikut dalam projek kami
Ubah suai parameter konfigurasi, nod kluster dan konfigurasi kata laluan;
Pastikan versi Jedis
yang diperkenalkan menyokong tetapan kata laluan, spring-data-redis
1.8 atau di atas, SpringBoot
Hanya versi 1.5 dan ke atas menyokong tetapan kata laluan;
############### Redis 集群配置 ######################### spring.custome.redis.cluster.nodes=172.20.0.1:7001,172.20.0.2:7002,172.20.0.3:7003 spring.custome.redis.cluster.max-redirects=3 spring.custome.redis.cluster.max-active=500 spring.custome.redis.cluster.max-wait=-1 spring.custome.redis.cluster.max-idle=500 spring.custome.redis.cluster.min-idle=20 spring.custome.redis.cluster.timeout=3000 spring.custome.redis.cluster.password=redis.cluster.password
RedisTemplate
Perkenalkan kebergantungan (jika perlu)dan
, kemudian bergantung pada versiorg.springframework.boot spring-boot-starter-data-redis redis.clients jedis org.springframework.data spring-data-redis redis.clients jedis 2.9.0 org.springframework.data spring-data-redis 1.8.0.RELEASE
Inject SpringBoot
Kita perlukan tiga komponen iaitu Jedis
, spring-data-redis
, Jedis
Berikut adalah kod untuk inject spring-data-redis
. Mula-mula buat
RedisTemplate
Akhir sekali, kembalikan RedisTemplate
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.data.redis.connection.RedisClusterConfiguration; import org.springframework.data.redis.connection.RedisNode; 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.StringRedisSerializer; import java.time.Duration; import java.util.ArrayList; import java.util.List; public class RedisClusterConfig { @Bean(name = "redisTemplate") @Primary public RedisTemplate redisClusterTemplate(@Value("${spring.custome.redis.cluster.nodes}") String host, @Value("${spring.custome.redis.cluster.password}") String password, @Value("${spring.custome.redis.cluster.timeout}") long timeout, @Value("${spring.custome.redis.cluster.max-redirects}") int maxRedirect, @Value("${spring.custome.redis.cluster.max-active}") int maxActive, @Value("${spring.custome.redis.cluster.max-wait}") int maxWait, @Value("${spring.custome.redis.cluster.max-idle}") int maxIdle, @Value("${spring.custome.redis.cluster.min-idle}") int minIdle) { JedisConnectionFactory connectionFactory = jedisClusterConnectionFactory(host, password, timeout, maxRedirect, maxActive, maxWait, maxIdle, minIdle); return createRedisClusterTemplate(connectionFactory); } private JedisConnectionFactory jedisClusterConnectionFactory(String host, String password, long timeout, int maxRedirect, int maxActive, int maxWait, int maxIdle, int minIdle) { RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); List nodeList = new ArrayList(); String[] cNodes = host.split(","); //分割出集群节点 for (String node : cNodes) { String[] hp = node.split(":"); nodeList.add(new RedisNode(hp[0], Integer.parseInt(hp[1]))); } redisClusterConfiguration.setClusterNodes(nodeList); redisClusterConfiguration.setPassword(password); redisClusterConfiguration.setMaxRedirects(maxRedirect); // 连接池通用配置 GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); genericObjectPoolConfig.setMaxIdle(maxIdle); genericObjectPoolConfig.setMaxTotal(maxActive); genericObjectPoolConfig.setMinIdle(minIdle); genericObjectPoolConfig.setMaxWaitMillis(maxWait); genericObjectPoolConfig.setTestWhileIdle(true); genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(300000); JedisClientConfiguration.DefaultJedisClientConfigurationBuilder builder = (JedisClientConfiguration.DefaultJedisClientConfigurationBuilder) JedisClientConfiguration .builder(); builder.connectTimeout(Duration.ofSeconds(timeout)); builder.usePooling(); builder.poolConfig(genericObjectPoolConfig); JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisClusterConfiguration, builder.build()); // 连接池初始化 connectionFactory.afterPropertiesSet(); return connectionFactory; } private RedisTemplate createRedisClusterTemplate(JedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer<Object> 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); StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key采用String的序列化方式 redisTemplate.setKeySerializer(stringRedisSerializer); // hash的key也采用String的序列化方式 redisTemplate.setHashKeySerializer(stringRedisSerializer); // value序列化方式采用jackson redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // hash的value序列化方式采用jackson redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
JedisConnectionFactory
Kelas alat tulisRedisClusterConfiguration
JedisPoolConfig
Dalam. fakta, ini adalah asas Perkara di atas telah selesai Kita dapat melihat bahawa ia adalah agak mudah untuk projek RedisTempalte
untuk menyambung ke gugusan JedisConnectFactory
Lebih-lebih lagi, jika persekitaran yang berdiri sendiri digunakan RedisClusterConfiguration
sebelum ini tidak perlu menulis kelas alat sekarang, dan operasi sebelumnya masih sah. JedisPoolConfig
rreeeeAtas ialah kandungan terperinci Bagaimana untuk menyambung projek SpringBoot ke kelompok Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!