Heim > Datenbank > Redis > Hauptteil

Wie Springboot Redis integriert und eine weltweit eindeutige Index-ID generiert

PHPz
Freigeben: 2023-05-30 23:01:07
nach vorne
1523 Leute haben es durchsucht

springboot integriertes Redis

POM-Datei

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Nach dem Login kopieren

application.yaml-Datei

spring:
  #redis 缓存
  redis:
     connect-timeout: 180000 #连接超时时间
    lettuce:
      pool:
        #连接池最大连接数
        max-active: 8
        #最大阻塞等待时间(负数表示没限制)
        max-wait: 1
        #连接池最大空闲连接
        max-idle: 5
        #连接池最小空闲连接
        min-idle: 0
    #单机模式
#    database: 0 # 集群模式该参数不生效
#    host: 127.0.0.1
#    port: 6379
    #集群模式开启
    cluster:
      nodes: 127.0.0.1:6379,127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005
      max-redirects: 3
    password:
Nach dem Login kopieren

Testverifizierung

Aufruf Wenn diese Schnittstelle 22 zurückgibt, ist die Redis-Integration erfolgreich. Generieren Sie einen verteilten, sich selbst erhöhenden ID-Wert. Geben Sie direkt den Code ein:

import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.wd.basic.common.support.component.CustomIdGenerator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

import javax.annotation.Resource;

/**
 * mybatis 配置
 *
 * @author 上官婉儿
 * @date 2022/03/21
 */
@Slf4j
@Configuration
public class MybatisPlusConfig {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    @Bean
    public IdentifierGenerator idGenerator() {
        return new CustomIdGenerator(stringRedisTemplate);
    }
}
Nach dem Login kopieren

Da diese Toolklasse in das gemeinsame Paket eingefügt werden muss, fügen Sie MybatisPlusConfig hinzu auf dem aufrufenden System, und wenn das Projekt startet, fügen Sie die Bean (stringRedisTemplate) zum CustomIdGenerator hinzu (so verstehe ich es, aber es wird möglicherweise nicht so erklärt) Wie Springboot Redis integriert und eine weltweit eindeutige Index-ID generiert

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.wd.basic.common.exception.BasicException;
import com.wd.basic.common.exception.enums.IDGeneratorExceptionEnum;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;

import java.util.Date;
import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * 自定义id发电机
 *
 * @author 上官婉儿
 * @date 2022/03/21
 */
public class CustomIdGenerator {

    private static final String I_KEY_PREFIX = "IKey:generator";

    public static final int KEY_EXPIRE_TIME = 2;

    private final StringRedisTemplate stringRedisTemplate;

    public CustomIdGenerator(StringRedisTemplate stringRedisTemplate) {
        this.stringRedisTemplate = stringRedisTemplate;
    }

    /**
     * 年月日时分秒 +6位 redis返回的自增序列(如000001、000002、000003...)
     * redis返回的自增序列 规则:
     * 根据传入的 key(相当于字段名)生成自增的序列,2s后重新自增;
     * 由于redis的incr原子性,也能保证每次返回的结果不会出现相同的值,
     */
    @Override
    public String nextUUID(Object entity) {
        String bizKey = entity.getClass().getName();
        String dateStr = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_MS_FORMATTER);
        RedisAtomicLong counter = new RedisAtomicLong(I_KEY_PREFIX + bizKey, Objects.requireNonNull(stringRedisTemplate.getConnectionFactory()));
        counter.expire(KEY_EXPIRE_TIME, TimeUnit.SECONDS);
        long redisId = counter.incrementAndGet();
        String redisIdStr = StrUtil.fillBefore(String.valueOf(redisId), &#39;0&#39;,6);
        return dateStr + redisIdStr;
    }
}
Nach dem Login kopieren
Testüberprüfung#🎜 🎜#

Starten Sie 10 Threads und führen Sie 1000 Mal aus:

Die Ergebnisse sind wie folgt: 1000 Einträge können wie gewohnt in 2 Sekunden ausgeführt werden ohne doppelte Werte

Änderung Ich habe versucht, ihn auf 10.000 zu setzen, aber er hat immer noch 10.000 erreicht. Es stellt sich heraus, dass nach jedem Thread-Eintritt dieser Codezähler verwendet wird .expire(KEY_EXPIRE_TIME, TimeUnit.SECONDS); um die Ablaufzeit dieses Schlüssels zurückzusetzen, aber 2 Sekunden reichen aus, um 100.000 Einträge zu generieren. Nach der Verwendung können Sie die Ablaufzeit entsprechend dem Systemgeschäft anpassen. 🎜🎜#

Das obige ist der detaillierte Inhalt vonWie Springboot Redis integriert und eine weltweit eindeutige Index-ID generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!