开发者学堂课程【Redis 入门到精通(基础篇):数据类型-数值增减操作】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/764/detail/13373
数据类型-数值增减操作
String 类型数据的扩展操作
业务场景
大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。
Orade 数据库具有 sequence 设定,可以解决该问题,但是 MySQL 数据库并不具有类似的机制,那么如何解决?
首先讨论一个企业问题,一张表上保存的数据不能让他无限制的扩张,要有一定的限度,因为会影响操作效率,
这个时候要做的就是去进行切割分离,也就是通俗的分库分表,先不考虑分库的问题,现在考虑分表,表有了,表里面的字节是一个一个递增的,如果要分到别的表里面,如果每个表控制自己的字增是会出问题的,也就是重复性的问题,一旦重复了,会很麻烦,主键重复了那还叫主键吗?
于是我们就要解决主键重复的问题,在 Orade 数据库中能做到,有序列的机制,可以解决,而 mysql 里面就无法完成,
这时 redis 就可以帮我们去做,我们把一张表分成若干张表,我们此时需要保证的就是所有的id都不重复,id是由数据库控制的,如果此时我们用自己来控制,那么就要用到 redis。
解决方案:
设置数值数据增加指定范围的值
Inor key
Incrby key increament
Incrbyfloat key increament
设置数值减少指定范围的值
Decr key
Decrby key increament
可以对字符串进行操作,如果是纯数字可以使用加一减一,首先设定一个数值,set num 1,然后 incr num,回车,然后 get num,回车,incr num,回车,incr num,然后会发现一直在加一,如果使用decr num,那么就会减一,对这个值进行增减,一次增减一个单位。
这就是 incr 跟 decr,可以对一个字符串进行增减,如果是纯数字就可以每次增减一;那么如果是 incrby,意思就是说,增加一个值通过我们给定的一个值,通俗的讲就是,加我们指定的值,输入就是 incrby num 10,就会加上10,相应的减法就是 decrby num 10。
那么 incrbyfloat 的意思是加上带有小数位的数字,如果说没有输入float那么会显示 error,也就是说无法加上,incrby 加的整数,这就是操作所使用的一些命令。
这里要注意的是,后面跟的数字可以是正数,也可以是负数,所有使用 incrby 的时候跟一个负数会呈现出减少的效果。
string 作为数值操作
string 在 redis 内部存储默认就是一个字符串,当遇到增减类操作 incr、decr 时会转成数值型进行计算。
redis 所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
注意:
按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis数值上限范围,将报错。