转至博客:
http://blog.sina.com.cn/s/blog_48c95a190101772i.html
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
分享到:
相关推荐
1. Redis与Memcached的对比:两者都是内存数据库,但Redis支持更丰富的数据结构,且提供持久化和主从复制功能,而Memcached仅支持简单的键值对。 2. Redis性能优化:包括合理配置内存大小、选择合适的持久化策略、...
1. Redis与其他缓存系统(如Memcached)的区别? 2. 解释Redis的持久化机制及其优缺点。 3. 如何解决Redis的并发竞争问题? 4. Redis如何实现分布式锁? 5. 举例说明Redis在实际项目中的应用场景。 6. Redis的内存...
2. 命令操作:常见的操作包括`set`(设置键值)、`get`(获取键值)、`delete`(删除键值)和`incr/decr`(原子递增/递减)。 3. 连接池:为了提高性能,应用通常会使用连接池管理与Memcached的连接,避免频繁创建和...
**Memcached:高效缓存与数据存储解决方案** Memcached是一款高性能、分布式内存对象缓存系统,主要用于加速Web应用,通过将数据...同时,了解其与Redis等其他缓存系统的差异,有助于选择更适合项目需求的解决方案。
- **计数器**:使用 incr/decr 操作,Redis可以轻松实现对特定数据的计数。 - **分布式锁**:通过设置过期时间,Redis可以作为分布式锁的实现,确保多线程或分布式环境下的数据一致性。 综上所述,Redis作为一款...
2. **基本操作**:主要包括set(设置)、get(获取)、delete(删除)、incr/decr(递增/递减)等命令。 **四、memcached 的优化与监控** 1. **缓存策略**:根据业务需求设置合理的缓存策略,如LRU(最近最少使用...
- `incr/decr key`:对整数值进行递增/递减操作。 - `stats`:显示服务器统计信息。 Memcached的简单易用性和高性能使其成为许多PHP开发者首选的缓存解决方案。在PHP中,可以通过PHP的Memcached扩展库来方便地与...
这些数据类型均基于字符串存储,但提供了强大的原子性操作能力,例如字符串的追加(Append)、数值的自增或自减(Incr/Decr)、列表的推入(Push)和弹出(Pop)操作等。相比传统的键值存储系统Memcached,Redis提供了更丰富...
- **计数器**:Strings的incr/decr操作适合实现网页浏览量统计等计数功能。 - **消息队列**:Lists可作为简单的消息队列,发布和订阅功能更适用于复杂的消息传递场景。 - **社交网络**:Sets和Sorted Sets可用于...
与Redis相比,Memcached更简单,专注于高速缓存,而Redis提供了更多的数据结构和持久化功能。选择哪种取决于具体应用场景和需求。 总结,Memcached作为一个高效的内存缓存系统,对于提升Web应用性能有着显著作用。...
常用操作包括set、get、incr、decr、append等,用于实现数据的赋值、获取、自增、自减、追加等操作。 2.2 hashes类型及操作 hashes类型是一个键值对集合,它非常适合存储对象。hashes类型常用操作包括hset、hget、...
Redis 提供了原子递增命令,例如 INCR、INCRBY、DECR 和 DECRBY 等。这些命令可以对字符串值进行原子递增操作,例如: $ redis-cli set counter 100 OK $ redis-cli incr counter (integer) 101 $ redis-cli incr ...
1. 基于缓存实现:例如Redis或Memcached,它们支持原子操作,如 incr/decr,可以方便地实现分布式锁。使用TTL(Time To Live)避免锁永不过期,且可以使用BRPOP/LPOP等命令实现阻塞等待。 2. 基于Zookeeper:...
在秒杀开始时,将商品库存加载到缓存中,通过原子操作(如Redis的INCR/DECR)处理库存扣减,避免数据库锁竞争。 3. **队列服务**:使用RabbitMQ、Kafka或Beanstalkd等消息队列,将用户请求放入队列,避免前端用户...
- **incr/decr**: 自增/自减键值。 - **append**: 在键值末尾追加字符串。 - **strlen**: 获取键值长度。 ##### 2.3 hashes类型及操作 - **hset/hmset**: 设置Hash表的字段值。 - **hget/hmget**: 获取Hash表的字段...
### Redis与Memcached对比 - **数据结构支持**:Redis支持更复杂的数据类型,例如列表、集合等,而Memcached主要支持简单的键值对。 - **数据持久化**:Redis支持将数据持久化到硬盘上,从而避免重启后数据丢失;而...
支持的操作包括但不限于GET、SET、DEL、INCR、DECR等。其中,GET和SET的时间复杂度为O(1),适用于快速读写操作。 2. **列表(Lists)**:由多个元素构成的有序集合,适用于消息队列、最近浏览记录等功能。常用命令如...
7. Redis与Memcached相比有哪些优势和劣势? 掌握以上知识点,将有助于你在面试中展示对Redis的深入理解和应用能力。同时,理解并能灵活运用Redis的各项特性和最佳实践,也能在实际工作中提升系统的效率和稳定性。...