广告
返回顶部
首页 > 资讯 > 数据库 >使用redis如何生成自增序列号码
  • 368
分享到

使用redis如何生成自增序列号码

redis 自增redis生成自增序列号redis自增序列号 2022-11-23 09:11:06 368人浏览 独家记忆
摘要

目录Redis生成自增序列号码导入依赖yml 配置工具方法redis生成唯一编号redis生成自增序列号码 导入依赖 <!--redis--> <dependency> <groupId&

redis生成自增序列号码

导入依赖

<!--redis-->
<dependency>
 <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <exclusion>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-logging</artifactId>
 </exclusion>
 </exclusions>
</dependency>

yml 配置

 redis:
   database: 10
   host: localhost
   port: 7701
   passWord: root

工具方法

package com.sd.sdactivity.controller;
import io.Netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import Java.util.List;

@RestController
public class testController {
@Autowired
private StringRedisTemplate redisTemplate;
  
@RequestMapping("/SeqGenerator")
  public String SeqGenerator(String prefix,int numLength){
    String upperCode =""; 
 Long size=redisTemplate.opsForList().size(prefix);//查找 prefix 的key值的数据长度
    if(size>0){//有数据
List leve =redisTemplate.opsForList().range(prefix,0,-1);//获取该key下面的所有值(-1 所有的值,;1下一个值
 upperCode=leve.get(leve.size()-1).toString();//返回最后一个值
    }
     String returnCode="";
     int Suffix; //后缀数字 if (!StringUtil.isNullOrEmpty(upperCode)){ //有数据
      String sequence =upperCode.substring(prefix.length());//截取前缀开始的后面的数字
      Suffix=Integer.parseInt(sequence);
      Suffix++;//最后的序号加一
    }else{
      Suffix=1;//没有数据
    }
     returnCode=prefix+String.fORMat("%0"+numLength+"d",Suffix);//后缀不够numLength长,前面补充0
    redisTemplate.opsForList().rightPush(prefix,returnCode);//存入Redis
    System.out.println(returnCode+"%%%");
    return returnCode;
 }
}

测试

2020-05-13 11:43:31.230  INFO 39268 --- [           main] c.f.SpringBootRedisApplicationTests      : seq00000002

redis生成唯一编号

在系统开发中,保证数据的唯一性是至关重要的一件事,目前开发中常用的方式有使用数据库的自增序列、UUID、时间戳或者时间戳+随机数等。

因为Redis是原子性的,所以我们可以用redis生成一个唯一的号码,记录一个编号,我们用这个编号可以配合时间戳生成一个唯一的key

接下来是上代码

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 

@Service("reportNumberUtils")
public class ReportNumberUtils {
 
    private static Logger logger = LoggerFactory.getLogger(ReportNumberUtils.class);
 
    @Resource
    private RedisTemplate redisTemplate;
 
    //传入制定的key和prefix
    public String getSeqNo(String key, String prefix)
    {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        //设置过期时间,这里设置为当天的23:59:59
        Date expireDate = calendar.getTime();
        //返回当前redis中的key的最大值
        Long seq = generate(redisTemplate, key, expireDate);
        //获取当天的日期,格式为yyyyMMdd
        String date = new SimpleDateFormat("yyyyMMdd").format(expireDate);
        //生成八为的序列号,如果seq不够八位,seq前面补0,
        //如果seq位数超过了八位,那么无需补0直接返回当前的seq
        String sequence = StringUtils.leftPad(seq.toString(), 8, "0");
        if (prefix == null)
        {
            prefix = "";
        }
        //拼接业务编号
        String seqNo = prefix + date + sequence;
        logger.info("KEY:{}, 序列号生成:{}, 过期时间:{}", key, seqNo, String.format("%tF %tT ", expireDate, expireDate));
        return seqNo;
    }
 
    
    public static long generate(RedisTemplate<?,?> redisTemplate,String key,Date expireTime) {
        //RedisAtomicLong为原子类,根据传入的key和redis链接工厂创建原子类
        RedisAtomicLong counter = new RedisAtomicLong(key,redisTemplate.getConnectionFactory());
        //设置过期时间
        counter.expireAt(expireTime);
        //返回redis中key的值,内部实现下面详细说明
        return counter.incrementAndGet();
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文档:

--结束END--

本文标题: 使用redis如何生成自增序列号码

本文链接: https://www.lsjlt.com/news/173541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用redis如何生成自增序列号码
    目录Redis生成自增序列号码导入依赖yml 配置工具方法redis生成唯一编号redis生成自增序列号码 导入依赖 <!--redis--> <dependency> <groupId&...
    99+
    2022-11-23
    redis 自增 redis生成自增序列号 redis自增序列号
  • 如何使用vbscript生成36进制自动增长序号
    这篇文章主要介绍了如何使用vbscript生成36进制自动增长序号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。asp生成0~9,a~z的36进制字符串,运行下面示例需要使用...
    99+
    2023-06-08
  • SQL使用ROW_NUMBER() OVER函数自动生成序列号
    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (O...
    99+
    2019-02-27
    SQL使用ROW_NUMBER() OVER函数自动生成序列号
  • 使用mybatisPlus生成oracle自增序列遇到的坑如何解决
    今天小编给大家分享一下使用mybatisPlus生成oracle自增序列遇到的坑如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-07-05
  • SQL如何使用ROW_NUMBER() OVER函数生成序列号
    这篇文章给大家介绍SQL如何使用ROW_NUMBER() OVER函数生成序列号,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ...
    99+
    2023-06-22
  • SQL使用ROW_NUMBER()OVER函数生成序列号
    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个...
    99+
    2022-11-12
  • Java使用EasyExcel动态添加自增序号列
    目录前言 实现 思路 其它 总结 前言 本文将介绍如何通过使用EasyExcel自定义拦截器实现在最终的Excel文件中新增一列自增的序号列,最终的效果如下: 此外,本文所使用的...
    99+
    2022-11-12
  • php如何生成不重复的序列号
    这篇“php如何生成不重复的序列号”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php如何生成不重复的序列号”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们...
    99+
    2023-06-06
  • idea如何自动生成序列化id
    要自动生成序列化ID,可以考虑以下几种方法:1. 使用UUID(Universally Unique Identifier):UUI...
    99+
    2023-08-30
    idea
  • 自动生成序号+开窗函数OVer的使用
    select row_number() over (order by name) as rowid, sysobje...
    99+
    2022-10-18
  • 如何使用Linux seq命令生成数字序列
    这篇文章主要讲解了“如何使用Linux seq命令生成数字序列”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Linux seq命令生成数字序列”吧!Linux 的 seq 命令可以以...
    99+
    2023-06-16
  • 如何使用代码生成器自定义Entity
    今天小编给大家分享一下如何使用代码生成器自定义Entity的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。代码生成器自定义En...
    99+
    2023-06-30
  • mybatis example如何自动生成代码 排序语句
    目录mybatis example自动生成代码 排序语句mybatis自动生成的example用法举个使用例子查询表全部数据方法说明mybatis example自动生成代码 排序语...
    99+
    2022-11-12
  • python如何使用列表生成式
    这篇文章主要为大家展示了“python如何使用列表生成式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用列表生成式”这篇文章吧。多多使用列表生成式替换下面代码:cube_num...
    99+
    2023-06-27
  • css如何使用counter()在列表中自动添加序号
    这篇文章主要介绍了css如何使用counter()在列表中自动添加序号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用counter()在...
    99+
    2022-10-19
  • Redis中的JSON序列化如何使用
    这篇文章主要介绍“Redis中的JSON序列化如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis中的JSON序列化如何使用”文章能帮助大家解决问题。Redis中的JSON序列化Redi...
    99+
    2023-07-06
  • python如何使用生成器代替列表
    小编给大家分享一下python如何使用生成器代替列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!尽量使用生成器代替列表##不推...
    99+
    2022-10-19
  • Oracle中如何用序列和触发器实现ID自增
    小编给大家分享一下Oracle中如何用序列和触发器实现ID自增,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在设计数据库的时候,Oracle中没有类似SQL Server中系统自动分配ID作为...
    99+
    2022-10-18
  • 如何使用vue中v-for生成table并给table加上序号
    小编给大家分享一下如何使用vue中v-for生成table并给table加上序号,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!现...
    99+
    2022-10-19
  • 如何使用IDEA代码生成器
    本篇内容主要讲解“如何使用IDEA代码生成器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用IDEA代码生成器”吧!基本使用IDEA 自带很多常用的动态模...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作