FWQ
Redis+DB实现基于号段的发号器原理
Redis+DB实现基于号段的发号器原理 收藏 各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《Redis+DB实现基于号段的发号器原理》,很明显是关于数据库的文章哈哈哈,其中内容主要会涉及到Redis、集群、发号器等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享! 什么是发号器 在互联网场景中,很多业务要求生成唯一的ID号,以用于区分某些资源。常见例子:电商系统中的订单ID号、聊天群组中的消息ID号、上传文件到存储系统中之后生成的文件ID号、用户注册系统中的用户ID号、商户系统中的商户ID号、开放平台中的开发者账号ID、餐饮店的排队进餐号、影剧院票据单号、医院/银行排队号等等,这些基本都是基于先来后到的规则生成,以期达到唯一性或稍显公平的享受某些资源。 你是否想过使用技术应该如何实现呢?下面引出本文主角:发号器(ticket dispenser),也可称之为ID生成器 (生成的ID号可以是字符串也可以是整数,本文仅探讨生成整数id的发号器实现原理)。 在互联网行业中,为了保证服务的稳定性、可用性、并发性等指标,服务一般是采用集群多节点部署,如何保证在这些不同的节点生成符合业务要求的ID,又引出另一个概念:分布式ID生成器(实现方案有多种)。关于分布式ID的常见实现方式参考笔者文章:分布式ID的5种生成方式以及Go源码中的一种应用,文章中列举了常见的5种实现方式以及原理。本文,则重点讲解使用Redis+DB基于号段的发号器实现原理。 实现发号器需要的关注点 需要关注的点大致有以下几个: – 有序性 正序或倒序,发号器基本都是基于某种纬度的正序排列。还有一些不需要有序性,只要保证唯一性即可。 – 递增性 随着时间的流逝,号码的值只能增大不能变小,即:后面生成的一定大于前面生成的。 – 唯一性 在整个生成的号码值域中,同一个号码有且仅出现一次。 – 先到先得 先申请号码的先获取到,后申请号码的后获取到。 基于号段的发号器实现原理 由上图可知,实现基于号段的发号器逻辑有2个角色: 1. 发号生成器 2.…