当我们web系统处于初期系统的时候,用户量比较小,我们的数据库的数据生成主键的时候可以采用increment自增策略,简单的做id的唯一生成器, 这种模式我们的web服务器不需要做额外的操作就可以保证数据库中主键是唯一的,但是随着业务量和用户量增长,我们就会做web集群和数据库集群。如下图所示:

在图中,我们发现当数据库集群化,就不能在使用increment自增了(这里暂时不考虑oracle的sequence的方案,因为oracle要钱啊,手动滑稽)。因为数据库自增长是依赖表的,分表分库之后就不行了。这时候我们需要一个策略可以实现id的自增且不唯一,这里给出一个方案使用redis的方案,因为redis是单线程的。不会有线程安全问题,redis提供了incr和incrby两种安全的自增方法。我们可以在web服务器端直接调用redis的方案.在业务层就给出一个唯一自增的id。如下图所示:

如图中所示我们可以使用同一的redis服务器生成id,具体的代码实现 这里使用java实现 使用jedis作为通信的工具包,封装两个工具类。第一个类是用来封装跟redis获取连接相关工具类。

这里需要用到一个配置文件:

 
接下来是redis生成id工具类

 我们就可以直接用IDGenerator的next方法传入一个字符串作为key生成id 比如说要为用户生成id,可以给出一个"user"字符串 。

redis生成自增长ID教程相关推荐

  1. Redis生成全局唯一ID

    简介: 全局唯一ID生成器是一种在分布式系统下用来生成全局唯一ID的工具 特性: 唯一性 高性能 安全性 高可用 递增性 生成规则: 有时为了增加ID的安全性,我们可以不直接使用Redis自增的数值, ...

  2. sql 用户定义函数自动生成自增长ID

      1 -- -流动人员号自动编号函数,由区域代码-年月日-序列号组成的 每日新序号   2 -- -geovindu@163.com 涂聚文 www.dusystem.com   3 if   ex ...

  3. java+redis+lua生成自动增长的ID序列号

    1.编写lua脚本用于生成主键ID序列号,内容如下 local key = tostring(KEYS[1]); local count = tonumber(KEYS[2]); local date ...

  4. 案例实战:采用redis生成淘宝商品的全局id

    案例实战:采用redis生成淘宝商品的全局id 一.为什么分布式系统需要全局唯一id ? 在互联网系统中,并发越大的系统,数据就越大,数据越大就越需要分布式,而大量的分布式数据就越需要唯一标识来识别它 ...

  5. Java使用位图+redis生成抖音号、淘淘号、B站UID号等分布式ID

    文章目录 前言 一.位图BitMap依赖 二.完全基于内存单实例代码 2.1 运行结果: 2.2 优点 2.3 缺点 2.4 思考: 三.利用reids+位图的方式实现分布式ID的生成 3.1 流程图 ...

  6. java redis 生成唯一id_Redis在集群环境中生成唯一ID

    概述 设计目标:每秒最大生成10万个ID,ID单调递增且唯一.Reidis可以不需要持久化ID. 要求:集群时钟不能倒退. 总体思路:集群中每个节点预生成生成ID:然后与redis的已经存在的ID做比 ...

  7. 如何在高并发分布式系统中生成全局唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

  8. 如何在分布式场景下生成全局唯一 ID ?

    作者 l 会点代码的大叔(CodeDaShu) 在分布式系统中,有一些场景需要使用全局唯一 ID ,可以和业务场景有关,比如支付流水号,也可以和业务场景无关,比如分库分表后需要有一个全局唯一 ID,或 ...

  9. 高并发分布式系统中生成全局唯一Id汇总

    全局唯一ID <高并发分布式系统中生成全局唯一Id汇总> Twitter 方案(Snowflake 算法):41位时间戳+10位机器标识(比如IP,服务器名称等)+12位序列号(本地计数器 ...

最新文章

  1. 思科三层交换配置清单与案例
  2. c语言笔记照片_c语言笔记
  3. kafka同一个group 消费两个topic吗_MQ: 一张图读懂kafka工作原理
  4. 云计算学习(1-1)云计算的定义
  5. appsettings 连接oracle数据库,ABP .net core集成访问Oracle数据库
  6. [转载] python 元组tuple - python基础入门(14)
  7. 树莓派能做什么_使用树莓派做两轮自平衡车(一)
  8. Compound供应量突破70亿美元
  9. Python实现最简单的神经网络(数字识别)
  10. linux安装mysql.rpm软件包_Linux环境安装MySQL数据库(RPM格式的软件包)
  11. 原码,反码,补码的概念
  12. linux 程序员字体下载,编程字体Monaco字体 For Linux版
  13. DOSBox安装及使用详解
  14. html如何解决412问题,网站412怎么解决?
  15. 半胱氨酸表面修饰CdTe量子点;半胱氨酸修饰CdTe/CdS量子点;L-半胱氨酸修饰CdTe/CdS量子点(Cys)-CdTe/Cds定制供应
  16. 阿里云服务(一)—ECS和VPC
  17. 乌龙钻白玉 白虎卧沙滩
  18. 链接服务器“(null)“的 OLE DB 访问接口 “SQLNCLI10“ 返回了消息 “客户端无法建立
  19. MiniGui打开GridView控件
  20. hadoop 2.7.3 版本下载

热门文章

  1. 单片机洗衣机控制系统电路理解
  2. vbs 对excel的操作 删除、修改单元格,设置字体、背景色 .
  3. php soapclient 异常,PHP SoapClient:SoapFault异常无法连接到主机
  4. k8s的nfs存储外挂设置过程
  5. 仿蘑菇街,京东,苏宁易购,海尔商城等33套大气购物商城网站模板,附源码免费下载地址...
  6. apple_截至2020年3月,所有与Apple CarPlay兼容的车辆
  7. Spring Cloud Gateway 参考指南
  8. 社区发现算法——SCAN算法
  9. 解决COM组件80070005错误
  10. 微软模拟飞行10厦门航空涂装_《微软飞行模拟》第二弹更新 享受在美飞行的旅途...