Heim  >  Artikel  >  Datenbank  >  So verwenden Sie Redis in SpringBoot

So verwenden Sie Redis in SpringBoot

WBOY
WBOYnach vorne
2023-06-02 14:43:211949Durchsuche

1. Abhängigkeiten

Maven-Abhängigkeiten sind wie folgt: Es ist zu beachten, dass Spring-Boot-Starter-Data-Redis standardmäßig Salat als Treiber verwendet Client. Endseitiger Treiber, daher wird hier Salat ausgeschlossen und jedis eingeführt:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2. Abhängigkeitsbeziehung in Spring Data Redis:

So verwenden Sie Redis in SpringBootDiese Abhängigkeitsbeziehung möchte ausdrücken, dass Spring Redis betreibt über RedisConnection. RedisConnection kapselt die native Jedis-Linie. Um das RedisConnection-Schnittstellenobjekt zu erhalten, wird es über RedisConnectionFactory generiert.

3. Konfiguration

Konfigurationsdateikonfiguration:

# Redis 连接配置
# 单机 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 连接池配置
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-total=50
spring.redis.jedis.pool.max-wait=2000ms

Codekonfiguration:

@Configuration
public class RedisConfig {
    private RedisConnectionFactory connectionFactory = null;
 
    @Bean
    public RedisConnectionFactory initRedisConnectionFactory(){
        if(connectionFactory!=null){
            return connectionFactory;
        }
        JedisPoolConfig poolConfig =new JedisPoolConfig();
        //最大空闲数
        poolConfig.setMaxIdle(30);
        //最大连接数
        poolConfig.setMaxTotal(50);
        //最大等待毫秒数
        poolConfig.setMaxWaitMillis(2000);
        //创建Jedis连接工厂
        JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig);
        //获取单机的redis配置,如果是集群的话用集群配置类
        RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return connectionFactory;
    }
}

4. RedisTemplate

Was ich hier erklären möchte, ist, dass wir RedisConnectionFactory manuell finden müssen, um es zu erhalten RedisConnection. Und die RedisConnection muss jedes Mal manuell geschlossen werden. Daher stellt Spring Data Redis RedisTemplate bereit, um den Betrieb zu erleichtern. Es ist von jedis gekapselt und blockiert die Schritte der Ressourcenbeschaffung und -freigabe.

Der Kernpunkt, auf den Sie bei der Verwendung von RedisTemplate achten sollten, ist, dass der Serialisierer beim Schreiben von Schlüsselwerten und beim Lesen von Redis unterschiedliche Serialisierungsmethoden verwendet. Wenn Sie beispielsweise Zeichen verarbeiten, müssen Sie einen stringspezifischen Serialisierer verwenden, und wenn Sie Objekte verarbeiten, müssen Sie einen objektspezifischen Serialisierer verwenden.

Die aktuellen Serialisierer sind wie folgt:

So verwenden Sie Redis in SpringBoot

StringRedisSerializer:

StringRedisSerializer ist der von RedisTemplate standardmäßig verwendete Schlüssel- und Wertserialisierer. Er serialisiert Zeichenfolgen mithilfe der UTF-8-Codierung in Byte-Arrays. Da sowohl Schlüssel als auch Wert in Redis Zeichenfolgen sind, kann der Standard-Serializer StringRedisSerializer die Anforderungen der meisten Situationen erfüllen.

Jackson2JsonRedisSerializer:

Jackson2JsonRedisSerializer ist ein auf Jackson basierender Redis-Schlüssel- und -Wert-Serialisierer, der Objekte in Zeichenfolgen im JSON-Format serialisieren und in Redis speichern kann. Um den Jackson2JsonRedisSerializer-Serializer zu verwenden, müssen Sie eine Jackson-Abhängigkeit hinzufügen. Sie können Objekte in JSON-formatierte Zeichenfolgen oder JSON-formatierte Zeichenfolgen in Objekte konvertieren.

JdkSerializationRedisSerializer:

JdkSerializationRedisSerializer ist ein Serialisierer, der auf Javas eigener Serialisierungsmethode basiert und Objekte zur Speicherung in Byte-Arrays serialisieren kann. Obwohl JdkSerializationRedisSerializer einfach und benutzerfreundlich ist, ist seine Effizienz relativ gering und das serialisierte Byte-Array ist relativ groß, sodass es zum Speichern großer Datenmengen ungeeignet ist.

GenericJackson2JsonRedisSerializer:

GenericJackson2JsonRedisSerializer ist ein Jackson2JsonRedisSerializer, der Generics unterstützt, die jeden Objekttyp serialisieren und das Objekt in eine JSON-Formatzeichenfolge serialisieren können. Es erfordert die Angabe des Zieltyps sowohl bei der Serialisierung als auch bei der Deserialisierung.

OxmSerializer:

OxmSerializer ist ein Serialisierer, der auf dem O/X-Mapping-Framework von Spring basiert und die Serialisierung von Objekten in XML-Formatzeichenfolgen unterstützt. Obwohl OxmSerializer über eine hohe Flexibilität verfügt, ist seine Serialisierungs- und Deserialisierungsleistung gering und er eignet sich nicht zum Speichern großer Datenmengen.

Kurz gesagt, bei der Auswahl eines Serialisierers müssen Sie eine Auswahl basierend auf der tatsächlichen Situation treffen und den geeigneten Serialisierer basierend auf dem Datentyp und den Leistungsanforderungen auswählen.

Sie können es einfach direkt bei der Verwendung festlegen. Bei der Einstellung erhalten Sie viele Optionen für die Granularität des Effekts, unabhängig davon, ob er für alle Datenstrukturen vom Redis-Typ oder für einen bestimmten Typ von Redis-Datenstrukturtypen wirksam ist :

So verwenden Sie Redis in SpringBootZum Beispiel möchte ich einen String-Serialisierer verwenden, der global wirksam wird:

@Bean
public RedisTemplate<Object,Object> initRedisTemplate(){
  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setDefaultSerializer(new StringRedisSerializer());
  return redisTemplate;
}

5. Grundoperationen

Das Folgende ist ein Codebeispiel für die Verwendung von RedisTemplate zum Betrieb grundlegender Redis-Datentypen:

It Es ist zu beachten, dass bei der Definition von RedisTemplate durch @Bean eine generische und generische Ausrichtung erforderlich ist.

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class RedisService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
 
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
 
    public void setHash(String key, String hashKey, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put(key, hashKey, value);
    }
 
    public Object getHash(String key, String hashKey) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get(key, hashKey);
    }
 
    public void setList(String key, Object value) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        listOps.rightPush(key, value);
    }
 
    public Object getList(String key, long index) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        return listOps.index(key, index);
    }
 
    public void setSet(String key, Object value) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        setOps.add(key, value);
    }
 
    public Object getSet(String key) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        return setOps.members(key);
    }
 
    public void setZSet(String key, Object value, double score) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        zsetOps.add(key, value, score);
    }
 
    public Object getZSet(String key, long start, long end) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        return zsetOps.range(key, start, end);
    }
 
}

6. Transaktionen

Hier ist ein Codebeispiel mit Transaktionen:

@Autowired
private RedisTemplate<String, String> redisTemplate;
 
public void transactionalOperation() {
    // 开启 Redis 事务
    redisTemplate.multi();
 
    try {
        // 执行多个 Redis 命令
        redisTemplate.opsForValue().set("key1", "value1");
        redisTemplate.opsForValue().set("key2", "value2");
 
        // 提交事务
        redisTemplate.exec();
    } catch (Exception e) {
        // 回滚事务
        redisTemplate.discard();
    }
}

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Redis in SpringBoot. 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