Redis与Memcached的incr/decr差异对比
目前广泛使用的分布式缓存Redis和Memcached均支持对整数型Value值的增减,对应到具体命令中就是incr和decr命令。
incr/decr是原子性操作(memcached 1.2.4及以后版本加入/redis),其被广泛应用于计数器和限速器。
一、分布式缓存Redis和Memcached在这两个命令的具体语法上的不同
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命令语法
1)incr key integer,即将指定主键key的value值加上给定的integer,
2)decr命令语法为decr key interger,即将指定主键key的value值减去给定的interger。
二、分布式缓存Redis和Memcached支持的整型数值的不同
Redis支持的整数型Value值的具体类型为字符串(十进制)表示的带符号64-bit整数,
Memcached支持的整数型Value值的具体类型为字符串(十进制)表示的无符号64-bit整数,
这就导致两个系统支持的整数型Value值的取值范围是不一样的。Redis支持的整数型Value值范围是-9223372036854775808~9223372036854775807,而Memcached的范围则是0~18446744073709551615。
1、key内存储的字符串被解释为十进制
#Server
Memcached_version: 1.2.6
# Server
redis_version:3.1.999
从上述对Memcached和Redis的实验可以看到,对incr命令保存为字符串。
2、Redis带符号64-bit整数,Memcached无符号64-bit整数
看下Memcached情况又会如何
三、分布式缓存Redis和Memcached,incr/decr的差异
1、Redis如果对应的key不存在,incr/decr不会失败,而会从0开始计数
2、Memcached如果对应值不存在,incr/decr会失败,而不会从0开始计数
上面的测试是基于Memcached 文本协议的做法。因为文本协议不允许incr 设置不存在的key。
如xmemcached中,memcachedClient.incr("a",5,1),memcachedClient.incr("a",5)
incr和decr都有三个参数的方法,第一个参数指定递增的key名称,第二个参数指定递增的幅度大小,第三个参数指定当key不存在的情况下的初始值。
两个参数的重载方法省略了第三个参数,默认指定为0。
3、incr/decr操作无法刷新过期时间
Redis,我们知道set、getset命令为键值赋值同时会消除键值的生存时间、persist命令把一个设置过过期时间的键取消过期时间设置,如果需要可以重新使用expire命令为键设置生存时间。而其他对键的操作命令(如incr、lpush、hset、zrem)都不会影响键的生存时间。
Memcached,incr/decr操作无法刷新过期时间,所以过期时间以初始化的时间为准。
因此,如果使用memcached作为长期的计数器,必须用额外的机制定时刷新item。memcached协议提供了touch方法,只刷新时间,不对值作修改。
如果是二进制协议,则可以直接用incr命令设置初始值,过期时间。
Memcached官方协议看这里 。
参考:http://blog.sina.com.cn/s/blog_48c95a190101772i.html
由于本人经验有限,文章中难免会有错误,请浏览文章的您指正或有不同的观点共同探讨!
Redis与Memcached的incr/decr差异对比的更多相关文章
- 论述Redis和Memcached的差异
原文 https://yq.aliyun.com/articles/60981?utm_campaign=wenzhang&utm_medium=article&utm_source= ...
- mongodb,redis,memcached,mysql对比
1.性能都比较高,性能对我们来说应该都不是瓶颈总体来讲,TPS方面redis和memcache差不多,要大于mongodb 2.操作的便利性memcache数据结构单一redis丰富一些,数据操作方面 ...
- redis、memcached、mongoDB 对比与安装
一.redis.memcached.mongoDB 对比 Memcached 和 Redis都是内存型数据库,数据保存在内存中,通过tcp直接存取,速度快,并发高.Mongodb是文档型的非关系型数据 ...
- Redis和Memcached对比
Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...
- Redis和Memcached对比【转】
Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...
- Redis与Memcached的实现对比
原文链接:http://www.tuicool.com/articles/qUBNZva Memcached 与 Redis ,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了.前两年还在学校 ...
- redis、memcached、mongoDB 对比
Mongodb和Memcached不是一个范畴内的东西.Mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.Mongodb 和 Memcached不存在谁替换谁的问题. ...
- Redis和Memcached的区别详解
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/119.html?1455855360 Redis的作者Salvatore ...
- Redis和Memcached的区别
From: https://www.biaodianfu.com/redis-vs-memcached.html Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储 ...
随机推荐
- Android请求返回417解决办法
今天碰到个很奇怪的问题,APP通过代理链接服务器会收到HTTP 417错误,经过网上查找发现是由于以下代码造成: HttpParams params = new BasicHttpParams(); ...
- 在C#使用文件监控对象FileSystemWatcher的几种方案
最近在项目中有这么个需求,就是得去实时获取某个在无规律改变的文本文件中的内容.首先想到的是用程序定期去访问这个文件,因为对实时性要求很高,间隔不能超过1S,而且每次获取到文本内容都要去分发给web服务 ...
- 浅谈.NET中闭包
什么是闭包 闭包可以从而三个维度来说明.在编程语言领域,闭包是指由函数以及与函数相关的上下文环境组合而成的实体.通过闭包,函数与其上下文变量之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程 ...
- 针对《来用》的NABC分析
项目名:<来用> 特点:拥有以往win7在内的众多小游戏 NABC分析 N(need需求): 之所以有这个想法是因为,在WIN7,XP系统中往往有很多众所周知的小游戏(比如扫雷),但是在w ...
- 理解bashrc和profile[转载]
这儿有一篇文章不错 https://wido.me/sunteya/understand-bashrc-and-profile/ http://blog.csdn.net/luotuo44/artic ...
- C#开源系统大汇总(转)
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
- 我给女朋友讲编程html系列(3) --html中的超链接标签-a标签 和 框架frame与框架集frameset
我们浏览网页的时候,当单击某段文字或图片时,就会打开一个新的网页,这里面就使用了超链接. 就比如下图是一个导航类网页,当你单击某个链接就会打开新的网页. 比如,我拿我的qq空间“金河访谈”举例,新建一 ...
- 修改Input中Placeholder默认提示颜色(兼容)
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #f00; } input:-moz-pl ...
- 两个SVN仓库之间代码的转移
背景: 1.公司的svn服务器架设在了公司内网环境中,没有公网ip,所以离开了公司环境就无法访问(更新.提交...)svn服务器了: 2.四个开发人员去客户现场开发新的需求,在现场找了一台服务器临时搭 ...
- 圆形DIV
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...