Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis

Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis

WBOY
WBOYke hadapan
2023-05-28 15:49:061565semak imbas

Kata Pengantar

Redis mempunyai pangkalan data 0-16 Secara lalai, apabila kami mengendalikan redis, kami menggunakan pangkalan data 0, tetapi kadangkala projek kami mahu mengendalikan berbilang pangkalan data pada masa yang sama, dan kami tidak. ingin mengakses pangkalan data lain setiap kali Apabila memilih data pangkalan data, adalah terlalu rumit untuk menukar pangkalan data.

Jadi kita perlu mengkonfigurasi berbilang Klien Jedis, tetapi Jedis mudah disekat dan tidak begitu cekap, jadi saya menggunakan Klien Lettuce, iaitu kaedah sambungan Reaktif dan agak cekap. Tetapi bagaimana untuk menggunakan Klien Lettuce? Sebenarnya, secara amnya kami menambah pergantungan spring-boot-starter-data-redis dan menggunakan fungsi Redis melalui RedisTemplate Apabila versinya sangat tinggi, lapisan bawah RedisTemplate lalai menggunakan Klien Lettuce untuk mewujudkan sambungan dan Operasi data.

1. Tambah kebergantungan pom

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

2 Konfigurasikan berbilang sumber data dan tambahkannya pada bekas spring

Tangkapan skrin saya di bawah menggunakan empat sumber data, iaitu Perpustakaan No. , 2, 3, dan 4.

1) Buat kelas konfigurasi konfigurasi baharu

2) RedisStandaloneConfiguration(hos, port) Mulakan konfigurasi Redis, dan kemudian pilih nombor perpustakaan.

3) Mulakan LettuceConnectionFactory.

4) Instantiate a RedisTemplate dan tetapkan kaedah penyirian nilai kunci Di sini kunci dan nilai adalah kedua-dua rentetan, jadi penyiri memilih StringRedisSerializer.

5) Tetapkan LettuceConnectionFactory yang dibuat dalam langkah ketiga kepada RedisTemplate, dan suntikkannya ke dalam bekas spring dengan anotasi @Bean Apabila menggunakannya, cari terus dalam bekas spring melalui nama kaedah, dan pasang ia ke dalam contoh yang merujuknya.

import io.lettuce.core.resource.ClientResources;
import io.lettuce.core.resource.DefaultClientResources;
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.Configuration;
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.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.ObjectUtils;
 
import java.time.Duration;
 
/**
* reactive redis
* @Author:wangqipeng
* @Date:14:38 2019-07-03
*/
 
@Configuration
public class RedisDatasourceConfiguration {
 
    @Value("${redis.isCleanRedisCache:false}")
    private String cleanRedisCache;
    @Value("${redis.host:127.0.0.1}")
    public String host;
    @Value("${redis.port:6379}")
    public Integer port;
    private String password;
 
    @Value("${redis.timeout:2000}")
    public Integer timeout;
    public Integer maxIdle = 16;
    public Integer minIdle = 5;
    public Integer maxTotal = 30;
 
 
    @Bean
    public RedisTemplate<String, String> stringRedisTemplate1() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
        configuration.setDatabase(1);
        if (!ObjectUtils.isEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }
        return createRedisTemplate(creatFactory(configuration));
    }
 
    @Bean
    public RedisTemplate<String, String> stringRedisTemplate2() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
        configuration.setDatabase(2);
        if (!ObjectUtils.isEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }
        return createRedisTemplate(creatFactory(configuration));
    }
    @Bean
    public RedisTemplate<String, String> stringRedisTemplate3() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
        configuration.setDatabase(3);
        if (!ObjectUtils.isEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }
        return createRedisTemplate(creatFactory(configuration));
    }
    @Bean
    public RedisTemplate<String, String> stringRedisTemplate4() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
        configuration.setDatabase(4);
        if (!ObjectUtils.isEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }
        return createRedisTemplate(creatFactory(configuration));
    }
 
    @Bean
    public RedisTemplate<String, String> stringRedisTemplate5() {
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
        configuration.setDatabase(5);
        if (!ObjectUtils.isEmpty(password)) {
            RedisPassword redisPassword = RedisPassword.of(password);
            configuration.setPassword(redisPassword);
        }
        return createRedisTemplate(creatFactory(configuration));
    }
 
    private RedisTemplate<String, String> getSerializerRedisTemplate(){
        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
 
    private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, String> redisTemplate = getSerializerRedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    private GenericObjectPoolConfig getGenericObjectPoolConfig(){
        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
        genericObjectPoolConfig.setMaxTotal(maxTotal);
        genericObjectPoolConfig.setMinIdle(minIdle);
        genericObjectPoolConfig.setMaxIdle(maxIdle);
        genericObjectPoolConfig.setMaxWaitMillis(timeout);
        return genericObjectPoolConfig;
    }
 
    private LettuceConnectionFactory creatFactory(RedisStandaloneConfiguration configuration){
        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
        builder.poolConfig(getGenericObjectPoolConfig());
 
//        LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = LettuceClientConfiguration.builder();
//        builder.clientResources(clientResources());
//        builder.commandTimeout(Duration.ofSeconds(3000));
        LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());
        connectionFactory.afterPropertiesSet();
        return connectionFactory;
    }
}

3. Cara menggunakan

Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis

Rujukan di sini ialah perpustakaan No. 2, yang dimuatkan ke dalam bekas spring melalui @Bean di atas.

Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi berbilang pangkalan data dalam Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam