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生成自增序列值,不管你是一台机器调用,还是集群环境调用,都能保证返回的值是不会重复的,一般小厂用这个生成自增编码是没问题的。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计选题推荐-课程学习微信小程序/安卓APP-项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

WebSocket在node端和客户端的使用

摘要 如果想要实现一个聊天的功能,就会想到使用WebSocket来搭建。那如果没有WebSocet的时候,我们会以什么样的思路来实现聊天功能呢? 假如有一个A页面 和 B页面进行通信,当A发送信息后,我们可以将信息存储在文件或者…

Oracle递归查询树形数据

实际生活有很多树形结构的数据,比如公司分为多个部门、部门下分为多个组,组下分为多个员工;省市县的归属;页面菜单栏等等。 如果想查询某个节点的父节点或者子节点,一般通过表自身连接完成,但如果该节点的子…

前端---认识HTML

文章目录 什么是HTML?HTML的读取、运行HTML的标签注释标签标题标签段落标签换行标签格式化标签图片标签a标签表格标签列表标签表单标签form标签input标签文本框单选框复选框普通按钮提交按钮文件选择框 select标签textarea标签特殊标签div标签span标签 什么是HTML&a…

UDP网络编程

一)熟悉TCP/IP五层协议: 1)封装:就是在数据中添加一些辅助传输的信息; 2)分用:就是解析这些信息 3)发送数据的时候,上层协议要把数据交给下层协议,由下层协议来添加一些信息 4)接收数据的时候,下层协议要把数据交给上层协议&#…

网络安全基础之php开发文件下载的实现

前言 php是网络安全学习里必不可少的一环,简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中,文件下载的功能是必不可少,比如我们在论坛看到好看图片好听的歌时,将其下载下来时就…

超级干货:光纤知识总结最全的文章

你们好,我的网工朋友。 光纤已经是远距离有线信号传输的主要手段,而安装、维护光纤也是很多人网络布线的基本功。 在网络布线中,通常室外楼宇间幢与幢之间使用的是光缆,室内楼宇内部大都使用的是以太网双绞线,也有使用…

利用角色roles上线wordpress项目

角色订制:roles ① 简介 对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web、db、ha 时或不同服务器组合不同的应用就需要写多个yml文件。很难实现灵活的调用。   roles 用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文…

农场养殖管理系统软件开发方案

一、项目概述 农场养殖管理系统是一款针对农场养殖管理的软件,旨在提高农场养殖效率和管理水平。本方案将详细介绍该系统的开发流程,包括需求分析、系统设计、数据库设计、界面设计、系统测试和上线运营等方面。 二、需求分析 在开发农场养殖管理系统…

全志R128平台SPI与DBI点屏性能大对比

SPI 与 DBI 性能对比 R128 平台的 SPI 接口参数如下 全双工同步串行接口Master/Slave模式可配置支持最大96MHz时钟频率支持SPI Mode0/1/2/3片选和时钟的极性和相位可配置5个时钟源支持中断或DMA传输支持多片选支持Standard Single/Dual/Quad SPI,FIFO深度64B支持B…

冯·诺伊曼体系结构--操作系统

文章目录 1.认识冯诺依曼系统1.1约翰冯诺依曼1.2冯诺依曼结构1.3存储器的读写速度1.4对冯诺依曼结构的认识1.5冯诺依曼结构在生活中的演示 2.操作系统--“搞管理”的软件2.1概念2.2OS存在的意义2.3管理的方式2.4系统调用和库函数概念 1.认识冯诺依曼系统 1.1约翰冯诺依曼 1.2冯…

Hololens开发笔记

1、关闭阴影 2、将相机渲染改为后向。因为默认是Forward,当在场景里面想使用点光源时,运行起来三角面会翻倍,影响软件运行流畅度。 3、第三人称同步相关。开启Host/Sever/Client前,需要将所有挂有NetworkObject/NetworkTransfor…