当前位置:

首页 > 编程开发 > springboot集成redis并生成全局唯一索引ID的方法

springboot集成redis并生成全局唯一索引ID的方法

IDM
IDM

IDM(Internet Download Manager)是一款专为 Win 平台打造的高速下载利器,享受超快的下载速度和极致的下载体验。在数码荔枝可以更优惠的价格购买正版 IDM,避免使用破解,获得安全稳定的服务。

立即下载
¥59
Windows 2026-10-12
Internet Download Manager 正版软件 Windows idm 装机必备

springboot集成redispom文件org.springframework.bootspring-boot-starter-data-redisapplication.yaml文件spring:#redis缓存redis:connect-timeout:180000#连接超时时间lettuce:pool:#连接池最大连接数max-active:8#最大阻塞等待时间(负数表示没限制)max-wait:1#连接池最大空闲连接max-idle:5#连接池最小空闲连接min-idle:0#单机模式#dat

本文目录

    springboot集成 redis

    pom文件

    
        org.springframework.boot
        spring-boot-starter-data-redis
    

    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成功;

    springboot集成redis并生成全局唯一索引ID的方法

    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;
    
    /**
     * mybatis 配置
     *
     * @author 上官婉儿
     * @date 2022/03/21
     */
    @Slf4j
    @Configuration
    public 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;
    
    /**
     * 自定义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), '0',6);
            return dateStr + redisIdStr;
        }
    }

    测试验证

    开始10个线程,跑1000次:

    springboot集成redis并生成全局唯一索引ID的方法

    结果如下,2s可以照常跑1000条完无重复值

    springboot集成redis并生成全局唯一索引ID的方法

    改成10000试试, 还是跑到了 10000,原来是 每一条线程进去后,走这个代码 counter.expire(KEY_EXPIRE_TIME, TimeUnit.SECONDS);将这个key的失效时间重新设置了一下,不过2s生成100000条已经够用了,大家可以根据系统业务,自定义缩短或增加失效时间;

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    iPhone17
    iPhone17

    iPhone 17 Pro Max相册锁设置全攻略:给你的隐私加把“锁” 给你的iPhone 17 Pro Max相册加上一把锁,其实非常简单。只需在设置中进入“照片”选项,开启“使用面容ID”或“使用密码”,就能有效守护你的个人隐私。下面这份详细指南,带你一步步搞定。 一、为什么需要设置相册锁?

    如何设置新iPhone16?10个步骤快速完成初始配置
    如何设置新iPhone16?10个步骤快速完成初始配置

    想让新到手的iPhone 16尽快进入工作状态?核心其实很简单:跟着系统引导走,重点搞定Apple ID、面容ID、数据迁移和隐私这几项,半小时内你就能用上新手机。 1. 开机并选择语言和地区 长按侧边按钮,看到苹果标志亮起,这事儿就成了。滑动屏幕开始,第一个选择题来了:选语言和地区。别小看这一步,

    iPhone15怎么改密码?详细步骤与常见问题解答
    iPhone15怎么改密码?详细步骤与常见问题解答

    想给你的iPhone 15换个新密码?操作其实很简单:进入“设置”,找到“面容ID与密码”或“触控ID与密码”,验证旧密码后就能直接设置新密码了。 iPhone15密码修改详细步骤 拿到iPhone 15,无论是哪款型号,修改密码的路径都设计得非常直观。整个过程就在“设置”里完成,跟着下面的步骤走,

    php72w redis,docker php7安装php-redis
    php72w redis,docker php7安装php-redis

    在Docker环境下为PHP安装Redis扩展:手动编译需下载源码、安装phpize、配置编译并安装,生成redis.so并在php.d目录新建redis.ini加载,重启PHP-FPM;也可直接yum安装php72w-pecl-redis,免手动编译。

    php 如何配置 redis,php 如何设置redis
    php 如何配置 redis,php 如何设置redis

    配置PHP的Redis扩展:先安装Redis服务,从GitHub下载phpredis源码,用phpize编译安装,修改php.ini添加extension=redis.so,重启php-fpm或Apache,通过phpinfo验证并连接Redis。

    屏下Face ID有什么优势?苹果iPhone何时会有屏下Face ID?
    屏下Face ID有什么优势?苹果iPhone何时会有屏下Face ID?

    苹果屏下FaceID因传感器难题推迟至2025年,屏下TouchID优先级较低。新方案融合短波红外线与光学系统,支持指纹识别及血氧等健康监测,识别速度更快。

    屏下Face ID有什么优势?iPhone 15系列会有Face ID吗?
    屏下Face ID有什么优势?iPhone 15系列会有Face ID吗?

    苹果对Face ID的执着,业内一直有目共睹。当安卓厂商早已全面铺开屏下指纹技术时,苹果依然坚持“安全第一”的路线,宁愿砸下更高成本研发屏下Face ID,也不肯回头用指纹识别。 所谓屏下Face ID,就是把Face ID所需的传感器藏在屏幕下方——类似屏下摄像头的思路——让用户再也看不到iPho

    屏下Face ID摄像头有什么优点?哪款iPhone会配备屏下Face ID摄像头?
    屏下Face ID摄像头有什么优点?哪款iPhone会配备屏下Face ID摄像头?

    苹果计划明年在iPhone16Pro上首次应用屏下FaceID技术,彻底移除刘海和灵动岛,仅保留前置摄像头单打孔,实现真正全面屏视觉体验,大幅提升屏占比与一体感。

    面容ID不可用怎么办?iPhone升级iOS 16后Face ID不能用解决办法
    面容ID不可用怎么办?iPhone升级iOS 16后Face ID不能用解决办法

    升级iOS16后,部分iPhone的面容ID提示不可用。首先建议重启设备,其次更新系统,然后揭下贴膜并擦拭传感器,最后尝试恢复出厂设置。若因摔落或进水导致硬件损坏,则需联系苹果售后维修。同时还可检查面容设置、强制重启,并备份数据。

    升级iOS 16 后 Face ID不可用怎么办?
    升级iOS 16 后 Face ID不可用怎么办?

    升级iOS16后部分iPhone用户遭遇FaceID不可用提示,原因不明且苹果未发布官方说明。可通过检查更新、面容ID设置、确认无遮挡、重启设备、添加替用外貌、重设面容ID或联系支持等九种方法尝试解决。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?