一、解决主键自增的业务场景
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命名惯例