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,谁才是适合你的缓存?的更多相关文章

  1. memcached与redis实现的对比

    版权声明:本文由田京昆原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/129 来源:腾云阁 https://www.qclo ...

  2. Memcached和Redis对比和适用场景

    关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memca ...

  3. Django缓存系统选择之Memcached与Redis的区别与性能对比

    Django支持使用Memcached和Redis这两种流行的内存型数据库作为缓存系统.我们今天来看Memcached和Redis的区别和性能对比. redis和memcached的区别 1.Redi ...

  4. memcached和redis对比

    关于memcached和redis的使用场景,总结如下:两者对比: redis提供数据持久化功能,memcached无持久化. redis的数据结构比memcached要丰富,能完成场景以外的事情: ...

  5. memcached与redis 对比

    一. 综述 读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数据库中,但是查询数据会相对比较慢,特别是用户很多时,频繁的查询,需要耗费 ...

  6. redis对比memcached

    摘要 : 简单地比较Redis与Memcached的区别,大多数都会得到以下观点: 1  Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储. 2  Re ...

  7. Memcached与Redis对比,Redis基础笔记回顾

    Memcached 1.为什么要把数据存入内存?快 2.Memcached和Redis的区别 (1)Memcached缓存.Redis数据库,Memcached不支持持久化到磁盘 (2)Redis提供 ...

  8. 谈谈Memcached与Redis

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...

  9. Memcached 及 Redis 架构分析和比较

    Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等) 也很相似,在这里把两者放 ...

随机推荐

  1. 微软宣布一批新获得Microsoft Teams认证的会议硬件

    COVID-19 疾病流行期间,微软见到了 Microsoft Teams 视频会议解决方案取得的巨大增长.然而在许多情况下,生产力与音视频硬件的质量息息相关.好消息是,该公司刚刚完成了一批第三方硬件 ...

  2. 边缘控制平面Ambassador全解读

    Ambassador是由Datawire开源的一个API网关项目,主要在Kubernetes的容器编排框架中使用.Ambassador本质上是一个通过配置边缘/API来管理Envoy数据面板的控制面板 ...

  3. mysql 5.7 MGR

    最近看了一下mysql5.7的MGR集群挺不错的,有单主和多主模式,于是乎搭建测试了一下效果还不错,我指的不错是搭建和维护方面都比较简单.网上绝大多数都是单主模式,当然我这里也是,为了加深印象,特意记 ...

  4. Java中的集合Queue

    2019独角兽企业重金招聘Python工程师标准>>> package com.zhaogang.test; import org.junit.Test; import java.u ...

  5. JWT的浅谈

    在实际工作过程中,运行jmeter脚本的时候,开发给了一个jwt的授权信息,到底是做什么用的呢,翻阅了一些资料,整理如下: 一.JWT(Json Web Token)是什么 JWT是一串格式为xxxx ...

  6. Flutter 打包Android APK 笔记与事项

    获取一个KEY 首先要获取 你的 打包应用的一个 key ,这一步其实和 在AndroidStudio 上打包 APK 一样,都是要注册一个本地的 key,key 其实也就是 jks文件啦. 如果已经 ...

  7. 如何 Laravel 中验证 zip 压缩包里的文件?

    在 Laravel 程序中上传文件时,请求验证可以很好验证上传的文件.你可以要求上传文件必须为 图片 , 也可以限制文件字节 大小 , 也可以根据 mime types 或者 文件扩展名 过滤文件. ...

  8. Java种sleep和wait的区别

    1,sleep方法是Thread类的静态方法,wait()是Object超类的成员方法 2,sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时 ...

  9. Linux目录、文件的管理

    centos目录结构 ls / 查看根目录下有哪些文件或者目录 bin 可执行文件的目录 sbin 存放root用户可执行文件目录 etc 配置文件 boot 引导文件 home 普通用户宿主目录 l ...

  10. spring的单元测试

    如果spring 4.3.18这个版本的spring要使用junit,需要使用junit的junit-4.12之上的版本.使用这个版本junit的时 候需要引入hamcrest-all的jar包.之前 ...