对比Memcached和Redis,谁才是适合你的缓存?
Memcached vs Redis
近期公司采购软件,评估时,某软件谈到使用了 Memcached 和 Redis 缓存。在本文中,将研究这两个流行的缓存的异同,方便理解和记忆。
1. Memcached 与 Redis
通常,我们会考虑在处理大量数据时使用缓存提高性能。
Memcached 是一个分布式内存缓存系统,设计简单易用,非常适合用作缓存或会话存储。
Redis 是一个内存中的数据结构存储,它提供了一系列丰富的特性。它作为缓存、数据库、消息代理和队列非常有用。
2. 安装
2.1. 安装 Memcached
下载最新版的 Memcached 包并执行make进行安装 :
$ wget http://memcached.org/latest
$ tar -zxvf memcached-1.6.3.tar.gz
$ cd memcached-1.6.3
$ ./configure && make && make test && sudo make install
2.2. 安装 Redis
相似的, 安装最新版本的 Redis server:
$ wget http://download.redis.io/releases/redis-5.0.8.tar.gz
$ tar xzf redis-5.0.8.tar.gz
$ cd redis-5.0.8
$ make
3. 求同
3.1. 亚毫秒延迟
Memcached 和 Redis 都通过将数据保存在内存中来提供 亚毫秒级 的响应时间。
3.2. 数据分区
类似地,两个内存数据库都允许跨多个节点分发数据。
3.3. 编程语言支持
同样,两者都支持所有主要的编程语言,包括Java、Python、JavaScript、C和Ruby。
另外,内存中的两个数据库都有一些Java客户机。例如,Memcached 有 Xmemcached 和 Memcached-java-client , Redis 有 Jedis, Lettuce, 和 Redisson。
3.4.缓存清除
Memcached 允许使用 flush_all 命令清理缓存. 相似的, Redis 允许我们从缓存中删除所有内容通过使用命令: FLUSHDB and FLUSHALL.
3.5. 可伸缩性
这两种缓存解决方案都提供了在需求呈指数增长时处理大数据的高可伸缩性。
4. 存异
4.1. 命令行模式
Memcached 可以通过telnet连接到服务器并执行命令:
$ telnet 192.168.8.123 6605
Trying 192.168.8.123
Connected to 192.168.8.123
$ stats
STAT pid 14868
STAT uptime 175931
STAT time 1220540125
// ...
与Memcached不同,Redis有一个专用的命令行界面: Redis cli,允许我们执行命令:
$ redis-cli COMMAND
1) 1) "save"
2) (integer) 1
3) 1) "admin"
2) "noscript"
// ...
2) 1) "multi"
2) (integer) 1
3) 1) "noscript"
2) "fast"
// ...
3) 1) "geodist"
2) (integer) -4
3) 1) "readonly"
// ...
// ...
在这里,我们执行了COMMAND 命令 列出Redis提供的所有命令。
4.2. 磁盘I/O转储
Memcached使用第三方工具处理磁盘转储,如libmemcached tools或者像memcached dd.
但是,Redis为磁盘转储提供了高度可配置的默认机制,如RDB(Redis数据库文件)或AOF(仅附加文件)。这对于存档和恢复非常有用。
使用 redis cli,我们可以执行同步的 SAVE 获取内存中数据快照的命令:
$ redis-cli SAVE OK
在这里,命令将快照存储在 转储 .rdb 二进制文件,完成后返回状态确定。
但是,异步BGSAVE 的执行将启动产生快照的后台过程:
$ redis-cli BGSAVE
OK
此外,我们可以使用 LASTSAVE 命令检查上次成功的数据库快照的Unix时间。
$ redis-cli LASTSAVE
(integer) 1410853592
4.3. 数据结构
Memcached 将 键-值对 存储为字符串,每个值的大小限制为1MB。不过,Redis也支持其他数据结构 ,像list、set和hash一样,可以存储高达512MB的大小。
4.4. 复制
Memcached 支持使用第三方 如 repcached 进行复制。
与 Memcached 不同,Redis 通过复制主存储为我们提供了成倍增加集群的功能,以获得更好的可伸缩性和高可用性。
首先,我们可以使用 REPLICAOF 创建Redis主服务器的副本。接下来,我们在复制副本上执行 PSYNC 命令以从主机启动复制。
4.5. 事务
Memcached 不支持事务,尽管其操作是原子的。
Redis 为执行命令提供了开箱即用的事务支持。
我们可以使用 MULTI 命令启动事务。然后使用 EXEC 用于执行后续的命令。最后,Redis提供了 WATCH 命令用于有条件地执行事务。
4.6. 发布和订阅消息
Memcached 不提供开箱即用的 发布/订阅 机制。
另一方面Redis,使用 pub/sub 消息队列提供订阅消息的功能。
这在设计需要实时通信的应用程序(如聊天室、社交媒体订阅源和服务器内部通信)时非常有用。
Redis附带了诸如 [PUBLISH]、[SUBSCRIBE] 和 [UNSUBSCRIBE] 这样的专用命令,分别用于将消息发布到频道、订阅和取消订阅客户端到指定频道。
4.7. 地理空间支持
地理空间支持对于实现应用程序的基于位置的功能非常有用。不同于Memcached, Redis 带有特殊的[用于管理实时地理空间数据的命令]
举个例子, GEODIST 命令计算两个地理空间条目之间的距离。 同样地, GEORADIUS 命令返回所提供半径内的所有条目。
另外,我们可以使用 Spring Data Redis 在Java应用程序中启用Redis地理空间支持。
4.8. 架构
Redis使用单核,在存储小数据集方面表现出比 Memcached 更好的性能。
Memcached通过使用多个内核实现多线程体系结构。 因此,对于存储更大的数据集,Memcached的性能要优于Redis。
Memcached的多线程体系结构的另一个好处是它通过利用多个计算资源实现的高可伸缩性。
Redis可以通过集群进行横向扩展,设置和操作相对复杂。当然了,我们可以使用Java应用程序通过 jedis 或者 Lettuce 启用Redis集群。
4.9. LUA Scripting
与 Memcached 不同,我们可以对 Redis 执行[LUA scripts]。它提供了类似于 [EVAL] 和 [SCRIPT LOAD] 的命令,这些命令对于 LUA 脚本的执行非常有用。
例如,我们可以执行 EVAL 命令来计算脚本:
$ redis-cli eval "return redis.call('set',KEYS[1],'welldone')" 1 website
OK
在这里,我们可以使用 eval 设置key=website 的值为 welldone 。
4.10. 内存利用率
比较字符串数据结构时,Memcached的内存利用率高于Redis。
尽管如此,当Redis使用散列结构时,它提供了比Memcached更高的内存利用率。
5. 写在最后
在本文中,我们探讨了Memcached和Redis。首先,我们研究了两个内存数据库的相似性。然后,我们研究了这两种缓存解决方案所提供功能的差异。
目前有许多内存缓存解决方案可用。因此,我们应该考虑缓存引擎的特性,并将它们与我们实际的用例相匹配。
我们可以肯定地得出结论,Memcached是解决简单缓存问题的可靠选择。然而,一般来说,Redis通过提供更丰富的功能和各种各样的特性而优于Memcached,这些特性对于解决复杂的场景更有优势。
公众号: 锅外的大佬 ,欢迎加群~
博客地址: http://www.developlee.top
对比Memcached和Redis,谁才是适合你的缓存?的更多相关文章
- memcached与redis实现的对比
版权声明:本文由田京昆原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/129 来源:腾云阁 https://www.qclo ...
- Memcached和Redis对比和适用场景
关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memca ...
- Django缓存系统选择之Memcached与Redis的区别与性能对比
Django支持使用Memcached和Redis这两种流行的内存型数据库作为缓存系统.我们今天来看Memcached和Redis的区别和性能对比. redis和memcached的区别 1.Redi ...
- memcached和redis对比
关于memcached和redis的使用场景,总结如下:两者对比: redis提供数据持久化功能,memcached无持久化. redis的数据结构比memcached要丰富,能完成场景以外的事情: ...
- memcached与redis 对比
一. 综述 读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数据库中,但是查询数据会相对比较慢,特别是用户很多时,频繁的查询,需要耗费 ...
- redis对比memcached
摘要 : 简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储. 2 Re ...
- Memcached与Redis对比,Redis基础笔记回顾
Memcached 1.为什么要把数据存入内存?快 2.Memcached和Redis的区别 (1)Memcached缓存.Redis数据库,Memcached不支持持久化到磁盘 (2)Redis提供 ...
- 谈谈Memcached与Redis
1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...
- Memcached 及 Redis 架构分析和比较
Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...
随机推荐
- linux sort 命令实用手册
Linux 中的sort 命令是一个很实用的工具,用于对文本内容以行为单位进行ASCII 码排序,默认按照升序进行排序(当然也可以按照降序). sort 命令的格式如下: sort `参数` `文件名 ...
- C/C++ 程序执行时间
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock( void ); 这个函数返回从“开启这个程序进 ...
- Linux运维基础阶段部分复习概要
[jj@oldboy ~]$ hostnamectl set-hostname zj 主机名只有root用户才有权限修改,普通用户想要修改要知道root密码,sudo提权,重启虚拟机或者打开新的窗口新 ...
- json序列化字符串后,配置枚举类型显示数值而不是名称
2019独角兽企业重金招聘Python工程师标准>>> 经常有这么一个需求,实体类里面用到枚举常量,但序列化成json字符串时.默认并不是我想要的值,而是名称,如下 类 @Data ...
- 从实践出发:微服务布道师告诉你Spring Cloud与Boot他如何选择
背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架 ...
- 基于HTML Canvas实现“指纹识别”技术
https://browserleaks.com/canvas 说明所谓指纹识别是指为每个设备标识唯一标识符(以下简称UUID).诸如移动原生的APP都可以通过调用相关设备API来获取相应的UUID. ...
- MySQL 中 on与where筛选条件的区别
在两张表连接的时候才会有on的筛选条件,那么on和where的区别是什么呢? 在inner join中是没有区别的,但是在左连接和右连接中,区别就体现出来了,下面以左连接为例: 1.用on的时候,只对 ...
- Java实现功能简单的学生管理系统(附带源代码)
这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...
- JavaScript 浅析数组对象与类数组对象
数组(Array对象) 数组的操作 创建数组方法 添加与修改数组元素 删除数组元素 使用数组元素 遍历数组元素 多维数组 数组相关的函数 concat() join() pop() push() sh ...
- 微信小程序-swiper(轮播图)抖动问题
ps:问题 组件swiper(轮播图)真机上不自动滚动 一直卡在那里抖动 以前遇到这个问题,官方一直没有正面回复.就搁置了,不过有大半年没写小程序了也没去关注,今天就去看了下官方文档,发觉更新了点好东 ...