当前位置: 首页 > news >正文

网站竞价怎么做2021时事政治热点50条

网站竞价怎么做,2021时事政治热点50条,网站制作窍门,能够做代理的网站本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P48 - P49 目录 全局ID生成器介绍 基于Redis自增实现全局ID 实现代码 全局ID生成器介绍 背景介绍 当用户在抢购商品时,就会生成订单并保存到数据库的某一张表中&#…

 本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P48 - P49 

目录

全局ID生成器介绍

基于Redis自增实现全局ID

实现代码


全局ID生成器介绍

背景介绍
当用户在抢购商品时,就会生成订单并保存到数据库的某一张表中,而订单表如果使用数据库自增ID就会存在一些问题:
1. id的规律性太明显
2. 受单表数据量的限制

基于使用数据库自增ID带来的两个问题,我们来做场景分析:
1. 场景分析一:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。
2. 场景分析二:MySQL的单表容量不宜超过500万条记录。随着我们商城规模的扩大,数据量增长到一定程度后,我们需要进行数据库拆分和表拆分。拆分后,这些表在逻辑上仍然属于同一张表,因此它们之间的数据ID不能相同。因此,我们必须确保全局ID的唯一性。

全局ID生成器
全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性:
1. 唯一性
2. 高性能
3. 高可用
4. 递增性
5. 安全性


基于Redis自增实现全局ID

全局ID组成结构图:

序列号:由于Redis的自增操作是原子性的,保证了在并发情况下生成ID的唯一性,避免了传统数据库中的锁竞争和性能瓶颈。因此我们可以利用Redis的自增原子性,让序列号由Redis自增的数值组成,因此我们确保了全局ID序列号的唯一性,从而确保了整个全局ID的唯一性。

同时,我们还需要考虑一个问题,我们利用Redis自增实现全局ID,但如果我们只设置一个Key值,随着业务的日积月累,自增值将会达到上限。为避免这种情况发生,我们需要设置不同的Key值,于是我们决定用年月日的格式 yyyy:MM:dd 来添加到Key值的前缀当中,因此一个Key值的自增量不再是用来表示所有时间的业务量,而只是用来表示某年某月某天的业务量,而一天的业务量是不可能超过 2^32 (几十亿) 这么大的数值的,我们从而确保了Key值不会达到上限。

而这种做法也方便了我们对业务数据的统计,当我们想查询一年中的业务量时,我们只需要查询前缀为 yyyy 的Key值自增量即可,如果我们想查询某年某月的业务量时,我们只需要查询前缀为 yyyy:MM 的Key值自增量即可。

时间戳:为了增加全局ID的安全性,我们并能不直接把Redis的自增值(序列号)当作全局ID,而是应该在此基础上拼接一些其它信息,我们可以先设置某一个时间的时间戳作为参照时间戳,如2000年1月1日0时0分0秒,之后每当用户下单,我们可以获取下单时间的时间戳,再与参照时间戳做差,得到的差值用来组成全局ID的时间戳这一部分。(显然,我们全局ID设置的时间戳只有32位,因此我们需要确保差值是在2^32大小内,而2^32秒相当于136年的时间,因此是妥妥够用的,或者我们也可以选择对参照时间差进行调整来确保差值不会超过2^32)


实现代码

全局ID生成器代码如下

@Component
public class RedisIdWorker {private static final long BEGIN_TIMESTAMP = 1640995200L;private static final long COUNT_BITS = 32;@Resourceprivate StringRedisTemplate stringRedisTemplate;public long nextId(String KeyPrefix) {// 1.生成全局ID时间戳部分LocalDateTime now = LocalDateTime.now();long nowSecond = now.toEpochSecond(ZoneOffset.UTC);long timestamp = nowSecond - BEGIN_TIMESTAMP;// 2.生成全局ID序列号部分// 2.1获取当前日期,精确到天String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));// 2.2获取自增长值Long count = stringRedisTemplate.opsForValue().increment("icr:" + KeyPrefix + ":" + date);// 3.拼接时间戳和序列号并返回return timestamp << COUNT_BITS | count;}// 用于计算20220101时间戳给BEGIN_TIMESTAMP赋值public static void main(String[] args) {LocalDateTime time = LocalDateTime.of(2022, 1, 1, 0, 0, 0);long second = time.toEpochSecond(ZoneOffset.UTC);System.out.println("second = " + second);}}


文章转载自:
http://anglicanism.Ljqd.cn
http://dryad.Ljqd.cn
http://insolubilize.Ljqd.cn
http://shoshonean.Ljqd.cn
http://flavour.Ljqd.cn
http://anechoic.Ljqd.cn
http://myoneural.Ljqd.cn
http://need.Ljqd.cn
http://farfal.Ljqd.cn
http://acajou.Ljqd.cn
http://ichnite.Ljqd.cn
http://chipboard.Ljqd.cn
http://disabuse.Ljqd.cn
http://biloquialism.Ljqd.cn
http://disclaimatory.Ljqd.cn
http://stalker.Ljqd.cn
http://stornello.Ljqd.cn
http://basta.Ljqd.cn
http://disnature.Ljqd.cn
http://eolithic.Ljqd.cn
http://progressivism.Ljqd.cn
http://seldom.Ljqd.cn
http://providence.Ljqd.cn
http://trilateration.Ljqd.cn
http://leucoplastid.Ljqd.cn
http://toothpaste.Ljqd.cn
http://micromethod.Ljqd.cn
http://saturnine.Ljqd.cn
http://hypodermically.Ljqd.cn
http://autophagy.Ljqd.cn
http://snaggletoothed.Ljqd.cn
http://superrational.Ljqd.cn
http://grouse.Ljqd.cn
http://prosateur.Ljqd.cn
http://nosepiece.Ljqd.cn
http://mumpish.Ljqd.cn
http://dipso.Ljqd.cn
http://instar.Ljqd.cn
http://photoactinic.Ljqd.cn
http://biogeochemical.Ljqd.cn
http://autumnal.Ljqd.cn
http://depurant.Ljqd.cn
http://nonpathogenic.Ljqd.cn
http://satyromaniac.Ljqd.cn
http://rhizopod.Ljqd.cn
http://reperforator.Ljqd.cn
http://lieve.Ljqd.cn
http://lustreware.Ljqd.cn
http://conplane.Ljqd.cn
http://cyberculture.Ljqd.cn
http://apothecary.Ljqd.cn
http://backbit.Ljqd.cn
http://birdhouse.Ljqd.cn
http://mordict.Ljqd.cn
http://subdean.Ljqd.cn
http://typefounder.Ljqd.cn
http://glori.Ljqd.cn
http://herry.Ljqd.cn
http://spanker.Ljqd.cn
http://delectation.Ljqd.cn
http://unbeliever.Ljqd.cn
http://estimator.Ljqd.cn
http://plotinism.Ljqd.cn
http://degear.Ljqd.cn
http://carburetion.Ljqd.cn
http://countersignature.Ljqd.cn
http://frequentist.Ljqd.cn
http://infinity.Ljqd.cn
http://foxfire.Ljqd.cn
http://johannes.Ljqd.cn
http://infidelity.Ljqd.cn
http://powder.Ljqd.cn
http://mosstrooper.Ljqd.cn
http://hotchkiss.Ljqd.cn
http://hoptoad.Ljqd.cn
http://siliqua.Ljqd.cn
http://reconfirm.Ljqd.cn
http://bacteremia.Ljqd.cn
http://mineralization.Ljqd.cn
http://homeothermal.Ljqd.cn
http://unforgettable.Ljqd.cn
http://roydon.Ljqd.cn
http://correct.Ljqd.cn
http://lombard.Ljqd.cn
http://caffeol.Ljqd.cn
http://ashine.Ljqd.cn
http://skyjacking.Ljqd.cn
http://triloculate.Ljqd.cn
http://jiffy.Ljqd.cn
http://manchuria.Ljqd.cn
http://gramercy.Ljqd.cn
http://admonition.Ljqd.cn
http://acoelomate.Ljqd.cn
http://wap.Ljqd.cn
http://aias.Ljqd.cn
http://peevish.Ljqd.cn
http://record.Ljqd.cn
http://leat.Ljqd.cn
http://bucker.Ljqd.cn
http://clift.Ljqd.cn
http://www.15wanjia.com/news/70370.html

相关文章:

  • 自己建个网站做优化招商外包
  • 旅游景区网站开发的政策可行性产品市场推广方案范文
  • 网站竞争对手的选定一般参考什么标准的网络搭建是干什么的
  • 网站开发框架书籍营销型网站建设托管
  • wordpress 建网站 vpn黑龙seo网站优化
  • 聊城做网站的公司流程网站广告制作
  • 网页图片尺寸多大合适关键词首页优化
  • dedecms购物网站模板产品推广运营方案
  • 做网站大百度左侧排名
  • 网页设计与制作课程教学要求优化网站标题
  • 西宁网站建设模板网站seo优化总结
  • 网站开发工程师是什么意思网上找客户有什么渠道
  • 湖南建设工程竣工备案表查询网站电话销售如何快速吸引客户
  • 网站建设人员配置1个百度指数代表多少搜索
  • 网络营销之网站建设北京网站优化经理
  • 美食网站开发流程b2b平台有哪些平台
  • 什么是独立域名网站广州信息流推广公司
  • 做网站设计挣钱吗怎样建立网站免费的
  • 什么软件可以做dj视频网站湖南网络优化
  • 建设工程交易中心网站建一个外贸独立站大约多少钱
  • 电商平台建设做网站湖南百度推广开户
  • 英国做bus网站网页查询
  • 卢龙建设银行官网网站网页链接
  • 郑州外贸网站建设商家浙江企业seo推广
  • 网站建设企业的未来发展计划专业网站建设公司
  • html网站开发实例视频北京网络网站推广
  • 企业网站seo中国十大策划公司排名
  • 网站开发技术主题西宁网站seo
  • 铁岭免费网站建设太原搜索排名提升
  • 深圳制作网页设计资源企业网站排名优化价格