本篇文章我们来讲一下string类型数据的扩展操作,我们先来看一下假设场景。
场景
在大型企业级应用中,分表操作是基本操作,也是常见操作,用多张表存储同类型的数据,那么这里就存在一个问题,主键必须唯一不能重复,虽然对于Oracle这种大型/超大型数据库来说都具有相关的机制,但是MySQL却并不具备类似的机制。如果应用的数据库是MySQL的话就很棘手,这时我们就可以使用Redis来解决。
Redis如何解决
Redis解决前述问题有两种方法:使用incr指令或使用decr指令。
incr指令
incr指令的作用是数值数据增加指定范围的值,常用指令有三种,分别是incr、incrby以及incrbyfloat
- incr 指令,语法incr key,该指令每执行一次,key对应的value就会加1,例如我们要给id加1,那么我们可以这么做,
incr id
。 - incrby指令,语法incrby key addnum,该指令每执行一次,key对应的值增加addnun,例如我们要给id增加5,那么我们可以这么做
incrby id 5
。 - incrbyfloat指令,语法incrbyfloat key addfloatnum,该指令每执行一次,key对应的值增加addfloatnum,其中addfloatnum是float类型,例如我们要给id增加1.5,我们可以这么做
incrbyfloat id 1.5
。
decr指令
decr的作用是数值数据减少指定范围的值,常用指令有三种,分别是decr、decrby。
- decr指令,语法decr key,该指令每执行一次,key对应的value就会减1,例如给num减1,指令如下
decr num
。 - decrby指令,语法decrby key subnum,该指令没执行一次,key对应的value的值减去subnum,例如num需要减去12,指令如下
decrby num 12
。
string作为数值操作
对于string类型的数据作为数值进行操作需要注意以下三点:
- string在Redis内部存储默类型认就是一个字符串。当遇到增减类操作时会转换成数值进行计算;
- Redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发对数据造成的影响;
- 如果按数值进行操作,那么原始数据在不能转换成数值或者超过了Redis数值的上线的话,将会报错。
Tip:
- Redis 用于控制数据库表主键Id,为数据库表逐渐提供生成策略,保障数据库表的主键唯一性;
- 此方案适用于所有数据库,且支持数据库集群。