本篇内容主要讲解“springboot集成redis并生成全局唯一索引ID的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot集成redis并生成全局唯一索引ID的方法”吧!
springboot集成 redis
pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
application.yaml文件
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:
测试验证
调用该接口,返回 22,则集成redis成功;
redis生成全局唯一索引ID
使用redis的RedisAtomicLong可以生成分布式自增的ID值;直接上代码:
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;@Slf4j@Configurationpublic class MybatisPlusConfig { @Resource private StringRedisTemplate stringRedisTemplate; @Bean public IdentifierGenerator idGenerator() { return new CustomIdGenerator(stringRedisTemplate); }}
由于此工具类需要放在 common包,所以在调用系统上新增 MybatisPlusConfig,在项目启动时候,将bean(stringRedisTemplate)送进到CustomIdGenerator中(我是这样理解的,可能不能这么解释)
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;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; } @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), '0',6); return dateStr + redisIdStr; }}
测试验证
开始10个线程,跑1000次:
结果如下,2s可以照常跑1000条完无重复值
改成10000试试, 还是跑到了 10000,原来是 每一条线程进去后,走这个代码 counter.expire(KEY_EXPIRE_TIME, TimeUnit.SECONDS);将这个key的失效时间重新设置了一下,不过2s生成100000条已经够用了,大家可以根据系统业务,自定义缩短或增加失效时间;
到此,相信大家对“springboot集成redis并生成全局唯一索引ID的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!