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 6605Trying 192.168.8.123Connected to 192.168.8.123$ statsSTAT pid 14868STAT uptime 175931STAT time 1220540125// ...

与Memcached不同,Redis有一个专用的命令行界面: Redis cli,允许我们执行命令:

$ redis-cli COMMAND1) 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 BGSAVEOK

此外,我们可以使用 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 websiteOK

在这里,我们可以使用 eval 设置key=website 的值为 welldone

4.10. 内存利用率

比较字符串数据结构时,Memcached的内存利用率高于Redis。

尽管如此,当Redis使用散列结构时,它提供了比Memcached更高的内存利用率。

5. 写在最后

在本文中,我们探讨了Memcached和Redis。首先,我们研究了两个内存数据库的相似性。然后,我们研究了这两种缓存解决方案所提供功能的差异。

目前有许多内存缓存解决方案可用。因此,我们应该考虑缓存引擎的特性,并将它们与我们实际的用例相匹配。

我们可以肯定地得出结论,Memcached是解决简单缓存问题的可靠选择。然而,一般来说,「Redis通过提供更丰富的功能和各种各样的特性而优于Memcached,这些特性对于解决复杂的场景更有优势」

memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?相关推荐

  1. 对比Memcached和Redis,谁才是适合你的缓存?

    Memcached vs Redis 近期公司采购软件,评估时,某软件谈到使用了 Memcached 和 Redis 缓存.在本文中,将研究这两个流行的缓存的异同,方便理解和记忆. 1. Memcac ...

  2. memcached客户端_分布式算法真是吊炸天 – memcached - 第287篇

    相关历史文章(阅读本文之前,您可能需要先看下之前的系列 ) 色谈Java序列化:女孩子慎入 - 第280篇 烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇 双向链表,比西天还远? ...

  3. memcached客户端_小水谈Memcache---Memcached安装

    介绍: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memca ...

  4. Memcached客户端性能评测报告

    转载:http://wenku.baidu.com/view/944935a15901020206409c08 Memcached客户端性能评测报告 1.     Memcached客户端简介 本次m ...

  5. memcached完全剖析–1. memcached的基础

    2019独角兽企业重金招聘Python工程师标准>>> 本文转自:http://blog.charlee.li/memcached-001/ memcached是什么? memcac ...

  6. 跨平台 C/C++ memcached 客户端 memcacheclient 介绍

    1.简介  C/C++ memcached 客户端首推 libmemcached,但是其并不兼容 Windows 下 VC++ 编译器.在 google code 的 memcached wiki 有 ...

  7. memcached客户端_Memcached集群的使用

    基础知识 什么是Memcached Memcached简介 Memcached:是一个免费开源的.高性能的.具有分布式内存对象的缓存系统,它通过减轻数据库负载加速动态Web应用: 这个实在没什么好说的 ...

  8. 基于java nio的memcached客户端——xmemcached

    1.xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API. 实际上是基于我实现的一个简单nio框架 http://code.google.com ...

  9. Memcached 客户端使用

    Memcached  客户端使用 网上摘抄,以备后用 package com.test.memcache; import java.util.Date; import com.danga.MemCac ...

最新文章

  1. IntelliJ IDEA 2020.3 重大特性
  2. 全字库说文解字字体_整理了10款免费商用中文字体,超好用
  3. 如何下载咸鱼app里面的视频
  4. linux mysql 文件恢复_linux下误删数据文件恢复
  5. Android——监听事件总结
  6. spring 基于java的配置
  7. 链表竟然比数组慢了1000多倍?(动图+性能评测)
  8. 【ES11(2020)】Promise 扩展 allSettled()
  9. Matlab之semilogx、semilogx、loglog函数
  10. 在防火墙中安装ASDM
  11. vue使用插件jsbarcode 生成条码下载
  12. windows 批处理(bat) 修改文件md5 值
  13. hive函数 next_day
  14. 计算机接口接触不良,如何处理电脑耳机插口接触不良
  15. 私域流量sop社群运营规划工作计划表格方案模板2022
  16. html 中写目录列表,制作的HTML目录列表
  17. 【2022最新】手把手教你拥有自己的服务器与网站(无需备案)
  18. VMWare安装Win10虚拟机
  19. iOS音视频开发十三:视频渲染,用 Metal 渲染
  20. 8P8C 双绞线应用: Ethernet 586A/B, RS232 - EIA 561

热门文章

  1. Linux的cat、more、less有什么区别
  2. 将横排文本变成竖排文本
  3. .NET基础示例系列之十七:VML绘制中国地图
  4. Windows又发现安全漏洞 能够控制网络用户
  5. 生物信息学基本知识笔记
  6. SmartDoc(YUIDoc) 注释编写
  7. CF908G New Year and Original Order
  8. 实验4 [BX]和loop指令
  9. Angualr6表单提交验证并跳转
  10. 带你深度解析Maven