【原】Redis实现生成自增流水号
场景:
公司内部有个业务场景是后台审核之后需要生成一个流水号,规则是: 201807280001,201807280002,201807280003,后面四位依次递增,前面年月日取当前时间并且转换成yyyymmdd格式。
于是想到redis比较适合做这种,而且因为是基于内存操作,速度比较快,不占用数据库资源,于是通过搜集整理出代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Override public String generate(String bizCode) { //** 获取今天的日期:yyyyMMdd *//* String date = com.i2p.util.DateUtils.getCurentDate(); String key = "serial.number:" + date; //** 自增 *//* long sequence = this .incr(key); String seq = SequenceUtils.getSequence(sequence); StringBuilder sb = new StringBuilder(); sb.append(bizCode).append(seq); String serial = sb.toString(); return serial; } |
package com.i2p.util; public class SequenceUtils { static final int DEFAULT_LENGTH = 4; public static String getSequence(long seq) { String str = String.valueOf(seq); int len = str.length(); if (len >= DEFAULT_LENGTH) {// 取决于业务规模,应该不会到达4 return str; } int rest = DEFAULT_LENGTH - len; StringBuilder sb = new StringBuilder(); for (int i = 0; i < rest; i++) { sb.append('0'); } sb.append(str); return sb.toString(); } }
/** * 得到系统当前日期 * "yyyyMMdd" */ public static String getCurentDate() { SimpleDateFormat tempDate = new SimpleDateFormat("yyyyMMdd"); String datetime = tempDate.format(new java.util.Date()); return datetime; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了