对比Memcached和Redis,谁才是适合你的缓存?
Memcached vs Redis近期公司采购软件,评估时,某软件谈到使用了 1. Memcached 与 Redis通常,我们会考虑在处理大量数据时使用缓存提高性能。
2. 安装2.1. 安装 Memcached下载最新版的
2.2. 安装 Redis相似的,安装最新版本的 Redis server:
3. 求同3.1. 亚毫秒延迟
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连接到服务器并执行命令:
与Memcached不同,Redis有一个专用的命令行界面: Redis cli,允许我们执行命令:
在这里,我们执行了COMMAND 命令 列出Redis提供的所有命令。 4.2. 磁盘I/O转储Memcached使用第三方工具处理磁盘转储,如libmemcached tools或者像memcached dd. 但是,Redis为磁盘转储提供了高度可配置的默认机制,如RDB(Redis数据库文件)或AOF(仅附加文件)。这对于存档和恢复非常有用。 使用 redis cli,我们可以执行同步的 SAVE 获取内存中数据快照的命令:
在这里,命令将快照存储在 转储 .rdb 二进制文件,完成后返回状态确定。 但是,异步BGSAVE 的执行将启动产生快照的后台过程:
此外,我们可以使用 LASTSAVE 命令检查上次成功的数据库快照的Unix时间。
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 命令来计算脚本:
在这里,我们可以使用 eval 设置key=website 的值为 welldone 。 4.10. 内存利用率比较字符串数据结构时,Memcached的内存利用率高于Redis。 尽管如此,当Redis使用散列结构时,它提供了比Memcached更高的内存利用率。 5. 写在最后在本文中,我们探讨了Memcached和Redis。首先,我们研究了两个内存数据库的相似性。然后,我们研究了这两种缓存解决方案所提供功能的差异。 目前有许多内存缓存解决方案可用。因此,我们应该考虑缓存引擎的特性,并将它们与我们实际的用例相匹配。 我们可以肯定地得出结论,Memcached是解决简单缓存问题的可靠选择。然而,一般来说,Redis通过提供更丰富的功能和各种各样的特性而优于Memcached,这些特性对于解决复杂的场景更有优势。 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 从输入网址到最后浏览器呈现页面内容,中间发生了什么?
- Dubbo想要个网关怎么办?试试整合Spring Cloud Gateway
- java.langNoClassdefFoundError & java.lang.ClassNotF
- Tesseract Ocr文字识别
- C/C++解题常用STL大礼包 含vector,map,set,queue(含优先
- 我可以在PHP中使用生成的变量名吗?
- 【Go】优雅的读取http请求或响应的数据
- php – 如何正确使用Bearer令牌?
- [Go] 实战项目在线客服GO-FLY -在gin框架使用IP识别库转换I
- 如何在 C# 中使用 const,readonly,static