未进化的程序猿
人生最苦痛的是梦醒了无路可走。做梦的人是幸福的;倘没有看出可走的路,最要紧的是不要去惊醒他。鲁迅

一、解决主键自增的业务场景

1、业务场景

大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键 id 必须保证统一性 ,不能重复。Oracle 数据库具有 sequence 设定,可以解决该问题,但是 MySQL数据库并不具有类似的机 制,那么如何解决? 

2、解决方案

1)、设置数值数据增加指定范围的值

incr key  
incrby key increment   
incrbyfloat key increment 

 2)、设置数值数据减少指定范围的值 

decr key  
decrby key increment 

 3、string 作为数值操作 

  • string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。 
  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发 带来的数据影响。
  • 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。                 
  • 9223372036854775807(java中long型数据最大值,Long.MAX_VALUE) 

4、Tips 1:

redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性

此方案适用于所有数据库,且支持数据库集群 

 二、解决如何自动控制热点新闻时效性的业务场景

1、业务场景

“最强女生”启动海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。

电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。

新闻网站会出现热点新闻,热点新闻最大的特征是时效性,如何自动控制热点新闻的时效性。

2、 解决方案 

1)、设置数据具有指定的生命周期 

 setex key seconds value  --- 设置秒数
 psetex key milliseconds value  --- 设置毫秒数

 3、Tips 2: 

redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作 

三、string 类型数据操作的注意事项 

 四、string 类型应用场景 

1、业务场景

主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数微博数量

 2、解决方案 

 

 五、key 的设置约定 

 数据库中的热点数据key命名惯例 

 

posted on 2020-12-11 16:12  甘茂旺  阅读(168)  评论(0编辑  收藏  举报