Redis应用之一自增编号

一、前言

前段时间同事用Redis实现收银台商品排行榜,我们都知道Redis最基础的功能是用来缓存数据,但其实它还有很多特性能解决很多实际问题,接下来几篇文章我们就聊聊Reids一些特性的应用,今天先聊一下借助Reids生成不会重复的订单编号。

二、订单编号

订单编号例子

  • 淘宝订单编号  827768001755267512 ,共18位,其中最后6位是不变的,这个订单编码变更过几次,现在具体规则我也不太清楚,原来和淘宝的商品中心打过一些交道,好像还下载代码,不管是表结构还是代码架构扩展性做得很好,不像商品发布Shell平台那么乱。

  • 公司牛奶订单编号  211118105409550001,生成规则yyMMddHHmmssSSS+3位的自增值。开始做的时候最后3位是用随机数生成的,当时还发生过重复的问题,后面才改成用Redis自增值解决,然而我们订单很少大多数订单最后三位都是001,把这个订单推到顺丰WMS里人家还很奇怪。

  • 公司窗帘订单编号  IN0480012,CR0406344等,两位的业务类型编码+自增值,然后小票上根据这个编号生成条形码 ,对条形码感兴趣的请看 扫码枪的那些事​。

订单编号设计规则

  • 订单编码要保证绝对不能重复

  • 订单编码的长度要尽量保持较短,方便用户客服,不过我们客户打400进来时,呼叫中心会快速定位到客户未完成订单, 如何给企业搭建呼叫中心​。

  • 订单编码尽量保证是纯整数,避免字母+数字格式,长整数的索引效率要远高于文本。

三、Redis的INCR

Ubuntu一键安装redis 

apt-get install redis-server

记得修改redis.conf 设置 requirepass,不然几分钟就会被黑了做挖矿机,请看 Redis被攻击纪实 

 INCR key:将key中的数值加1(注:INCRBY 可设置步长 ),如果KEY不存在会先初始化为0然后执行INCR

127.0.0.1:6379> incr ordcd(integer) 1127.0.0.1:6379> incr ordcd(integer) 2

Redis是IO多路复用单线程模型,一个CPU绑定了一块内存区域,所有客户端的命令都会放入队列,然后逐条执行,所以Redis INCR命令本身是原子性的,它能保证每次返回的结果不会是相同的值,可以做为原子性计数器。

四、SpringBoot整合 Spring-data-redis

Spring-data-redis提供了在Spring应用中通过简单的配置访问redis服务,它对redis底层开发包Jedis进行了高度封装,RedisTemplate提供了对redis的各种操作。

添加依赖

spring-boot-starter-data-redis

application.properties

RedisConfig.java 

注:对Redis的Key进行字符串序列化,解决Key不可识别问题,默认Key是类似"\xac\xed\x00\x05t\x00\x02cd"  这种十六进制的Key。

RedisService.java

然后业务代码中调用RedisService的incr生成自增序列值,不管你是一台机器调用,还是集群环境调用,都能保证返回的值是不会重复的,一般小厂用这个生成自增编码是没问题的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法(一):伪随机数的产生

文章目录 1.伪随机数介绍1.1.伪随机产生的意义1.2.伪随机产生的过程 2.产生U(0,1)的乘除同余法2.1.原始的乘同余法2.2.改进的乘同余法 3.产生正态分布的伪随机数4.基于逆变法产生伪随机数 1.伪随机数介绍 1.1.伪随机产生的意义 1.随机数的产生是进行随机优化的第一步也是最重要…

C++ final

参考:https://blog.csdn.net/qq_45358642/article/details/124232686#t2 不想让类继承 方式一:将类的构造函数设置为私有 子类不能调用父类构造函数初始化来实例化对象,所以不能继承 缺点:我们自己也不能够实例化出对象 class A { privat…

跨境电商商城源码:打造全球化的多语言、多货币、多商户平台

随着全球电子商务的快速发展,越来越多的企业希望在跨境电子商务领域取得突破。然而,要实现这一目标,企业需要解决语言、货币和商户等多个方面的挑战。本文将探讨如何使用跨境电商商城源码打造全球化的多语言、多货币、多商户平台。 一、多语言…

扫码连接WiFi微信小程序项目(带源码下载)

微信小程序扫码连wifi(共享wifi)(WiFi地推项目),2023年非常火爆全网的项目 下载: 项目源码 效果图如下 一 扫码连接WiFi如何收益 用户扫码连接WiFi时会有4-15秒的广告弹框,有效时间看完后微信会发送给项目负责人0.5-1元的广告费 (如给1元) 项目负责人(团长)(收益2…

【08】DestinationRule 高级配置功能

6.2 loadbalancer 定义demoapp v1.0和demoapp v1.1版本和subset的dr规则。参考weight中定义; 定义loadbalance在DestinationRule上定义规则 apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata:name: demoapp spec:host: demoapptrafficPoli…

火山引擎云原生存储加速实践

在火山引擎相关的业务中绝大部分的机器学习和数据湖的算力都运行在云原生 K8s 平台上。云原生架构下存算分离和弹性伸缩的计算场景,极大的推动了存储加速这个领域的发展,目前业界也衍生出了多种存储加速服务。但是面对计算和客户场景的多样性&#xff0c…

1 Supervised Machine Learning Regression and Classification

文章目录 Week1OverViewSupervised LearningUnsupervised LearningLinear Regression ModelCost functionGradient Descent Week2Muliple FeatureVectorizationGradient Descent for Multiple RegressionFeature ScalingGradient DescentFeature EngineeringPolynomial Regress…

C# 使用 RSA 加密算法生成证书签名产生“The system cannot find the file specified”异常

使用 C# 中 RSA(System.Security.Cryptography.RSA) 加密算法生成证书签名进行身份验证,在 VS2022 开发工具本地运行应用程序一切正常。 但将应用程序部署到远程服务器(如:Azure App Services)&#xff0c…

【数据结构】——单链表(增删查改)

目录 前言: 一:单链表的特点 ​编辑 二:单链表实现 单链表定义 2.1申请节点(初始化) 2.2单链表尾插 ​编辑 2.3单链表打印 2.4单链表头插 2.5单链表尾删 2.6单链表头删 2.7单链表查找 2.8在目标位置后面插入…

正点原子嵌入式linux驱动开发——Linux ADC驱动

在之前的笔记中,学习了如何给ICM20608编写IIO驱动,ICM20608本质就是ADC,因此纯粹的ADC驱动也是IIO驱动框架的。本章就学习一下如何使用STM32MP1内部的ADC,并且在学习巩固一下IIO驱动。 ADC简介 ADC ADC,Analog to D…

做一个springboot用户信息模块

目录 用户信息部分 1、获取用户详细信息 前言 代码分析 代码实现 测试 2、更新用户信息 前言 代码实现 测试 3、更新用户头像 前言 代码实现 测试 4、更新用户密码 前言 代码实现 测试 用户信息部分 1、获取用户详细信息 前言 承接上一篇博客登录注册功能…

找工作去哪个网站比较好

吉鹿力招聘网是一个专注于互联网岗位求职招聘的网站,提供海量的互联网人才储备。它主要覆盖了互联网类招聘,包括技术、产品、设计、运营、市场、销售等。吉鹿力招聘网的特点是用户量大,需求旺盛。如果你希望找工作,吉鹿力招聘网是…

[HCTF 2018]admin 1(四种解法!)

题目环境: 有登录和注册两个按钮 先注册一个admin用户 注册admin用户 显示admin用户已经被注册了 好,这就简单了,admin用户存在,但是不清楚admin用户的密码 尝试以下弱口令 第一种解法:密码爆破-尝试弱口令 进去login登…

基于selenium的pyse自动化测试框架

介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium所提供的方法操作更简洁。 特点: 默认使用CSS定位,同时支持多种定位方法(id\name\class\link_text\xpath\css&#xff09…

Python+unittest+requests接口自动化测试框架搭建 完整的框架搭建过程

首先配置好开发环境,下载安装Python并下载安装pycharm,在pycharm中创建项目功能目录。如果不会的可以百度Google一下,该内容网上的讲解还是比较多比较全的! 大家可以先简单了解下该项目的目录结构介绍,后面会针对每个文…

第 19 章 网络编程

网络可以使不同物理位置上的计算机达到资源共享和通信的目的,在Java中也提供了专门的网络开发程序包--java.net,以方便开发者进行网络程序的开发,本章将讲解TCP与UDP程序开发 19.1 网络编程简介 将地理位置不同的、具有独立功能的多台计算机…

uview的u-calendar日历组件,当设置了 minDate配置项后,会导致第一次打开日历弹窗,不会精准的滚动到选中的日期(设置了默认日期都没用)

发现需要给month.vue文件里的getMonth方法加一个延时器,猜测是因为设置最小日期后,日历没渲染完毕的时候就已经开始获取节点信息了

C# Onnx Yolov8 Detect 印章 指纹捺印 检测

应用场景 检测文件中的印章和指纹捺印,用于判断文件是否合规(是否盖章,是否按印) 效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.…

Makefile应用

Makefile实例 在c.c里面&#xff0c;包含一个头文件c.h&#xff0c;在c.h里面定义一个宏&#xff0c;把这个宏打印出来。 c.c&#xff1a; #include <stdio.h> #include <c.h>void func_c() {printf("This is C %d\n", C); }c.h #define C 1然后上传…

跨国企业如何选择安全靠谱的跨国传输文件软件?

随着全球化的不断发展&#xff0c;跨国企业之间的合作变得越来越频繁。而在这种合作中&#xff0c;如何安全、可靠地将文件传输给合作伙伴或客户&#xff0c;成为了跨国企业必须面对的问题。 然而&#xff0c;跨国文件传输并不是一件容易的事情&#xff0c;由于网络物理条件的…