Heim >Datenbank >Redis >Wie betreibt Java SpringBoot Redis?

Wie betreibt Java SpringBoot Redis?

PHPz
PHPznach vorne
2023-06-03 18:01:45608Durchsuche

    Redis

    1. Redis-Abhängigkeit hinzufügen

    Spring Boot bietet ein Komponentenpaket für die Redis-Integration: Spring-Boot-Starter-Data-Redis, das von Spring-Data-Redis und Salat abhängt.

    Darüber hinaus gibt es hier zwei kleine Details:

    • In der Spring Boot 1.x-Ära verwendete die unterste Schicht von Spring-Data-Redis Jedis, in der 2.x-Ära wurde sie durch Lettuce ersetzt. „Lettuce hängt von Commons-Pool2 ab.“

    • Spring Data Redis hat die API neu klassifiziert und gekapselt und die gleiche Art von Operationen in die Schnittstelle „Operation“ gekapselt: „Proprietäre Operation“ „Beschreibung“ „ValueOperations“ Datenoperationen vom Typ „String“.
    • ListOperations Datenoperation vom Listentyp
    <!-- springboot整合redis--> 
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- 使用 lettuce 时要加这个包;使用 jedis 时则不需要。-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
    </dependency>

    4, RedisTemplate und StringRedisTemplate

    RedisTemplateb272177b2cdcb9ccceef20c389511534 sieht „leistungsstärker“ aus als StringRedisTemplate, da es nicht erfordert, dass der Typ der Schlüssel und Werte String sein muss.

    Aber offensichtlich steht dies im Widerspruch zur tatsächlichen Situation von Redis: Auf der Ebene der kleinsten Speichereinheit kann Redis im Wesentlichen nur Zeichenfolgen und keine anderen Typen speichern. Aus dieser Sicht entspricht StringRedisTemplate eher der Speichernatur von Redis. Wie unterstützt RedisTemplate jeden Typ durch Serialisierung von Werten? "Hello Redis"

    Wenn Sie RedisTemplate zum Speichern von Objekten verwenden, wird die Adresse des Objekts für die Deserialisierung gespeichert, wodurch viel Speicherplatz verschwendet wird. Um dieses Problem zu lösen, verwenden Sie StringRedisTemplate und denken Sie, dass Sie manuell serialisieren und deserialisieren möchten

    ## Redis 服务器地址
    spring.redis.host=localhost
    ## Redis 服务器连接端口
    spring.redis.port=6379
    ## Redis 数据库索引(默认为 0)
    spring.redis.database=0
    
    ## 以下非必须,有默认值
    ## Redis 服务器连接密码(默认为空)
    spring.redis.password=
    ## 连接池最大连接数(使用负值表示没有限制)默认 8
    spring.redis.lettuce.pool.max-active=8
    ## 连接池最大阻塞等待时间(使用负值表示没有限制)默认 -1
    spring.redis.lettuce.pool.max-wait=-1
    ## 连接池中的最大空闲连接 默认 8
    spring.redis.lett	uce.pool.max-idle=8
    ## 连接池中的最小空闲连接 默认 0
    spring.redis.lettuce.pool.min-idle=0
    Wenn Springboot Die Spring-Boot-Starter-Web-Abhängigkeit wird nicht eingeführt, daher müssen Sie die Jackson-Abhängigkeit hinzufügen.
    //解决中文乱码问题
    @Configuration
    public class RedisConfig {
        
        @Bean
        public RedisTemplate redisTemplateInit(RedisConnectionFactory redisConnectionFactory) {
    
            RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
    
            redisTemplate.setConnectionFactory(redisConnectionFactory);
            //设置序列化Key的实例化对象
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            //设置序列化Value的实例化对象
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    
            /**
             *
             * 设置Hash类型存储时,对象序列化报错解决
             */
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            return redisTemplate;
        }
    }

    5. SpringBoot betreibt String stringa, Schlüsselablaufproblem
     Users users = new Users();
     users.setId(2);
     users.setUsername("李四2");
     redisTemplate.opsForValue().set("user:2", JSON.toJSONString(users)); //存的时候序列化对象
     String u = redisTemplate.opsForValue().get("user:2");  //redis 只能返回字符串
     System.out.println("u="+ JSON.parseObject(u,Users.class));  //使用JSON工具反序化成对象
    Gemäß dem obigen Testfall müssen beim Hash-Set drei Parameter übergeben werden. Der erste ist der Schlüssel, der zweite das Feld und der dritte der gespeicherte Wert. Im Allgemeinen stellt der Schlüssel einen Datensatz dar, das Feld ist das Attribut, das sich auf den Schlüssel bezieht, und der Wert ist der Wert, der dem Attribut entspricht.
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>
    Redis-Liste ist als bidirektionale verknüpfte Liste implementiert, die die umgekehrte Suche und das Durchlaufen unterstützt, was jedoch einen gewissen zusätzlichen Speicheraufwand in Redis mit sich bringt, einschließlich Sendepufferwarteschlangen usw ., auch Verwendung dieser Datenstruktur.
    //给user对象设置10分钟过期时间
    redisTemplate.opsForValue().set("user:1", JSON.toJSONString(users),10,TimeUnit.MINUTES );
    9. SpringBoot betreibt den ZSet-Sammlungstyp
     //删除键
     redisTemplate.delete(key);
     //判断键是否存在
     boolean exists = redisTemplate.hasKey(key);
    Schlüssel mit automatischem Ablauf. Redis kann beim Speichern aller Daten eine Zeitüberschreitung festlegen, und die Daten werden nach dieser Zeit automatisch gelöscht. Häufig verwendete Redis-Zeiteinheiten Normales Wann Wenn wir einen Schlüssel speichern, ist es natürlich, get/set zum Speichern zu verwenden. Tatsächlich ist dies keine gute Vorgehensweise. Redis verfügt über einen Mindestspeicher zum Speichern eines Schlüssels, er wird nicht kleiner sein als dieser Speicher. Daher kann uns eine vernünftige Verwendung von Hash dabei helfen, viel Speicher zu sparen.
    7. SpringBoot betreibt den Listensammlungstyp Redis List hat viele Anwendungsszenarien und ist auch eine der wichtigsten Datenstrukturen von Redis. Sie können eine Warteschlange einfach mit List implementieren. Ein typisches Anwendungsszenario von List ist die Push-Operation von List, um Aufgaben in List zu speichern, und dann verwendet der Worker-Thread die POP-Operation, um die Aufgabe zur Ausführung herauszunehmen.
    8. SpringBoot betreibt den Set-Sammlungstyp Die von Redis Set bereitgestellten externen Funktionen sind eine Listenfunktion, die jedoch automatisch dedupliziert werden kann not want to Set ist eine gute Wahl, wenn doppelte Daten auftreten, und Set bietet eine wichtige Schnittstelle zum Bestimmen, ob sich ein Mitglied in einer Set-Sammlung befindet, die List nicht bereitstellen kann.
    Redis. Das Verwendungsszenario von ZSet ähnelt dem von Set. Der Unterschied besteht darin, dass Set nicht automatisch sortiert wird, während ZSet Mitglieder durch Bereitstellung eines zusätzlichen Prioritätsparameters (Score) sortieren kann . Und es ist Einfügereihenfolge, also automatische Sortierung.

    Das obige ist der detaillierte Inhalt vonWie betreibt Java SpringBoot 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