Redis与Memcached的incr/decr差异对比

Redis和Memcached均支持对整数型Value值的增减,对应到具体命令中就是incr和decr命令。两个系统在这两个命令的具体语法上略有不同。

Redis的incr命令语法分两种:
1)incr key,即将指定主键key的value值加一;
2)incrby key increment,即将指定主键key的value值加上increment。

Redis的decr命令语法同样分为两种:
1)decr key,即将指定主键key的value值减一;
2)decrby key decrement,即将指定主键key的value值减去decrement。

Memcached的incr命令语法为incr key integer,即将指定主键key的value值加上给定的integer,decr命令语法为decr key interger,即将指定主键key的value值减去给定的interger。

那么Redis和Memcached对整数型Value值的增减只是上面那些语法的不同么?非也!两者最大的不同在于Redis支持的整数型Value值的具体类型为带符号64-bit整数,而Memcached支持的整数型Value值的具体类型为无符号64-bit整数,这就导致两个系统支持的整数型Value值的取值范围是不一样的。

Redis支持的整数型Value值范围是-9223372036854775808~9223372036854775807,而Memcached的范围则是0~18446744073709551615。

事实胜于雄辩,下面我们就通过两个系统的执行情况来看一看事实是否如此吧,列位上眼!

首先,我们来看一看Redis的执行情况:

1)先为一个主键赋一个带符号64-bit整数最大值9223372036854775807;
redis 127.0.0.1:6379> set max 9223372036854775807
OK

2)将该主键的值加一,系统提示此加一动作会导致向上溢出,由此可见Redis支持的最大整数型Value值确实为9223372036854775807;
redis 127.0.0.1:6379> incr max
(error) ERR increment or decrement would overflow

3)再为一个主键赋一个带符号64-bit整数最小值-9223372036854775808;
redis 127.0.0.1:6379> set min -9223372036854775808
OK

4)将该主键的值减一,系统提示此减一操作会导致向下溢出,由此可见Redis支持的最小整数型Value值确实为-9223372036854775808;
redis 127.0.0.1:6379> decr min
(error) ERR increment or decrement would overflow

然后,我们再来看一看Memcached的执行情况:
1)先为一个主键赋一个无符号64-bit整数最大值18446744073709551615;
set max 0 0 20
18446744073709551615
STORED

2)将该主键的值加一,系统的执行结果为0,即系统自身会自动避免向上溢出,这样Memcached支持的整数型Value值的值域就变成了一个首尾相接的环,由此可见Memcached支持的最大整数型Value值确实应该为
18446744073709551615;
incr max 1
0

3)再为一个主键赋一个无符号64-bit整数最小值0;
set min 0 0 1
0
STORED

4)将该主键的值减一,系统的执行结果还是0,即系统自身会自动避免向下溢出,由此可见Memcached支持的最小整数型Value值确实应该为0;
decr min 1
0

5)在上面我们说Memcached支持的整数型Value值的值域是一个首尾相接的环,这样不是严谨的说法,这个环仅对向上溢出有效,对向下溢出无效。下面的例子我们将Memcached支持的最大整数型值加二,系统返回的结果为1,即结果值是沿着向上溢出方向的第二个值。上面的例子我们将Memcached支持的最小整数型值减一,结果值还是0,而不是沿着向下溢出方向的第一个值18446744073709551615,所以说值域环仅对向上溢出有效。
set max 0 0 20
18446744073709551615
STORED
incr max 2
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值