Rumah > pangkalan data > Redis > Bagaimana untuk menyambung projek SpringBoot ke kelompok Redis

Bagaimana untuk menyambung projek SpringBoot ke kelompok Redis

WBOY
Lepaskan: 2023-05-28 08:54:50
ke hadapan
2412 orang telah melayarinya

Parameter Konfigurasi

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

  1. Ubah suai parameter konfigurasi, nod kluster dan konfigurasi kata laluan;

  2. 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;

  3. Ubah suai parameter konfigurasi

    ############### 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
    Salin selepas log masuk
    RedisTemplatePerkenalkan kebergantungan (jika perlu)
  4. Pastikan versi SpringBoot lebih besar daripada 1.4.x. Jika tidak, gunakan yang berikut konfigurasi, pertama kecualikan
  5. versi lama

    dan

    , kemudian bergantung pada versi
  6. dan
yang lebih tinggi.

   
            org.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
Salin selepas log masuk

Inject

Inject SpringBoot Kita perlukan tiga komponen iaitu Jedis, spring-data-redis, Jedis Berikut adalah kod untuk inject spring-data-redis. Mula-mula buat

mengikut konfigurasi dan juga perlu mengkonfigurasi

dan RedisTemplate Akhir sekali, kembalikan

untuk mencipta

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;
    }
}
Salin selepas log masuk
JedisConnectionFactoryKelas alat tulisRedisClusterConfigurationJedisPoolConfigDalam. 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. JedisPoolConfigrreeee

Atas ialah kandungan terperinci Bagaimana untuk menyambung projek SpringBoot ke kelompok Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan