Heim  >  Artikel  >  Datenbank  >  So konfigurieren Sie mehrere Datenbanken in Redis

So konfigurieren Sie mehrere Datenbanken in Redis

WBOY
WBOYnach vorne
2023-05-28 15:49:061571Durchsuche

Vorwort

redis verfügt standardmäßig über die Datenbanken 0-16. Wenn wir Redis betreiben, verwenden wir im Allgemeinen die Datenbank 0, aber manchmal möchten unsere Projekte mehrere Datenbanken gleichzeitig betreiben und wir möchten nicht die Datenbank wechseln Jedes Mal, wenn wir auf andere Datenbankdaten zugreifen, ist dies zu umständlich.

Wir müssen also mehrere Jedis-Clients konfigurieren, aber Jedis neigt zum Blockieren und ist nicht sehr effizient. Deshalb verwende ich den Lettuce-Client, eine reaktive Verbindungsmethode, die relativ effizient ist. Aber wie verwendet man Lettuce Client? Tatsächlich fügen wir Spring-Boot-Starter-Data-Redis-Abhängigkeiten hinzu und verwenden Redis-Funktionen über RedisTemplate. Wenn die Version sehr hoch ist, besteht die unterste Ebene von RedisTemplate darin, Verbindungen herzustellen Salat-Client.

1. Pom-Abhängigkeit hinzufügen

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

2. Konfigurieren Sie mehrere Datenquellen und fügen Sie sie dem Spring-Container hinzu

Mein Screenshot unten verwendet vier Datenquellen, nämlich die Bibliotheken 1, 2, 3 und 4.

1) Erstellen Sie eine neue Konfigurationskonfigurationsklasse

2) new RedisStandaloneConfiguration(host, port); Initialisieren Sie eine Redis-Konfiguration und wählen Sie dann die Bibliotheksnummer aus.

3) Initialisieren Sie eine LettuceConnectionFactory.

4) Instanziieren Sie ein RedisTemplate und legen Sie die Schlüsselwert-Serialisierungsmethode fest. Hier sind sowohl Schlüssel als auch Wert Zeichenfolgen, daher wählt der Serialisierer StringRedisSerializer.

5) Setzen Sie die im dritten Schritt erstellte LettuceConnectionFactory auf RedisTemplate und fügen Sie sie mit der @Bean-Annotation in den Spring-Container ein. Suchen Sie sie bei Verwendung direkt im Spring-Container über den Methodennamen und fügen Sie sie in die Instanz ein das verweist darauf.

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. Verwendung

So konfigurieren Sie mehrere Datenbanken in Redis

Die Referenz hier ist Bibliothek Nr. 2, die über @Bean oben in den Federbehälter geladen wird.

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie mehrere Datenbanken in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen