面试官会问问你 redis 和 memcached 的区别,但是 memcached 是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是 redis,没什么公司用 memcached 了。

redis 和 memcached 有啥区别?

redis 支持复杂的数据结构

redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。

redis 原生支持集群模式

在 redis3.x 版本中,便能支持 cluster 模式,而 memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。

性能对比

由于 redis 只使用单核,而 memcached 可以使用多核,所以平均每一个核上 redis 在存储小数据时比 memcached 性能更高。而在 100k 以上的数据中,memcached 性能要高于 redis,虽然 redis 最近也在存储大数据的性能上进行优化,但是比起 memcached,还是稍有逊色。

redis 的线程模型

redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

  • 多个 socket
  • IO 多路复用程序
  • 文件事件分派器
  • 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。

来看客户端与 redis 的一次通信过程:

客户端 socket01 向 redis 的 server socket 请求建立连接,此时 server socket 会产生一个 AE_READABLE 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该事件压入队列中。文件事件分派器从队列中获取该事件,交给连接应答处理器。连接应答处理器会创建一个能与客户端通信的 socket01,并将该 socket01 的 AE_READABLE 事件与命令请求处理器关联。

假设此时客户端发送了一个 set key value 请求,此时 redis 中的 socket01 会产生 AE_READABLE 事件,IO 多路复用程序将事件压入队列,此时事件分派器从队列中获取到该事件,由于前面 socket01 的 AE_READABLE 事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 key value 并在自己内存中完成 key value 的设置。操作完成后,它会将 socket01 的 AE_WRITABLE 事件与命令回复处理器关联。

如果此时客户端准备好接收返回结果了,那么 redis 中的 socket01 会产生一个 AE_WRITABLE 事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对 socket01 输入本次操作的一个结果,比如 ok,之后解除 socket01 的 AE_WRITABLE 事件与命令回复处理器的关联。

这样便完成了一次通信。

为啥 redis 单线程模型也能效率这么高?

  • 纯内存操作
  • 核心是基于非阻塞的 IO 多路复用机制
  • 单线程反而避免了多线程的频繁上下文切换问题


http://www.taodudu.cc/news/show-6354637.html

相关文章:

  • Redis和Memcached的区别(数据类型、内存管理、数据持久化、集群管理)
  • 跻身四强 | 坤前强势入围IDC加速计算服务器榜单
  • 坤强服务器安装
  • 震坤行旗下坤同智能仓储助力「数字龙华」闯关破题
  • 我们是ikun,为坤坤加油(简单的python反序列化、爬虫、越权、支付漏洞)
  • C++函数 【鸡】 坤坤带你拿下
  • 聚力远谋,创赢未来 | 坤前全国巡展南京站圆满收官
  • 羊了个羊增加版:鸡了个鸡,坤了个坤
  • 坤前AI管理平台
  • 坤泰股份在深交所上市:预计全年营收超4亿元,张明夫妇为实控人
  • 小菜坤的第一篇博客
  • 【坤坤讲师--图】Dinic
  • 中国人民大学于坤教授:以社会支持体系提升就业力 | 牛客大咖说
  • jQuery的基本用法
  • jQuery 用click() 失效,不起作用,直接父级使用on事件委托不好使
  • jQuery是什么?如何使用?
  • JQuery简单使用
  • java-JQuery的使用
  • Matlab实现Galton板的动画演示
  • 高斯分布Gaussian distribution、线性回归、逻辑回归logistics regression
  • 正态分布的期望和方差
  • matlab模拟高尔顿板实验,高尔顿钉板试验模拟
  • 蓝桥杯练习-位平方和
  • 假设检验流程
  • 贝叶斯统计R语言操作3——假设检验
  • WordCount 案例
  • 如何理解wordcount
  • WordCount单词计数详解
  • wordCount的解析
  • 单词计数(WordCount)

Redis之Vs Memcached相关推荐

  1. 为什么Redis要比Memcached更火?

    作者:Kaito 链接:kaito-kidd.com/2020/06/28/redis-vs-memcached/ 前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之 ...

  2. 为什么 Redis 要比 Memcached 更火?

    作者:Kaito 链接:kaito-kidd.com/2020/06/28/redis-vs-memcached/ 前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之 ...

  3. 为何Redis要比Memcached好用(转)

    转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...

  4. linux redis 5.6扩展,Windows下为PHP5.6安装Redis扩展和memcached扩展

    2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2.5-5.6-ts-vc11-x64.zip和php_igbinary-1.2.1-5.5-ts-vc11-x64.zi ...

  5. MongoDB 或者 redis 可以替代 memcached 吗?

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:seamon 链接:http://www.zhihu.com/question/19645807/answer/12605 ...

  6. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  7. Redis和Memcached的一些区别

    我们都知道,把一些热数据存到缓存中可以极大的提高速度,那么问题来了,是用Redis好还是Memcached好呢,以下是它们两者之间一些简单的区别与比较: 1. Redis不仅支持简单的k/v类型的数据 ...

  8. Redis相比memcached

    memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型 redis的速度比memcached快很多 redis可以持久化其数据

  9. redis相比memcached有哪些优势?

    memcached的所有value是简单的string类型,redis作为其替代者支持了丰富的数据类型 redis 运行速度比memcached快很多,并且它支持持久化操作 redis支持master ...

最新文章

  1. java线程之InheritableThreadLocal
  2. 【论文解读】深度强化学习基石论文:函数近似的策略梯度方法
  3. python max函数_使用'key'和lambda表达式的python max函数
  4. cocos 时间函数需要什么引用_酱香型白酒,为什么需要长时间储存?
  5. 程序编码(机器级代码+汇编代码+C代码+反汇编)
  6. python快速排序函数_python算法-快速排序
  7. Apsara Stack 技术百科 | 可运营的行业云,让云上资源跑起来
  8. php不同洁面使用json_PHP针对JSON操作实例分析
  9. Spring Security OAuth2.0_总结_Spring Security OAuth2.0认证授权---springcloud工作笔记157
  10. WiFi 连接到网络的过程
  11. php怎么重命名文件,phpstorm如何进行文件或者文件夹重命名
  12. 7z源码的编译与使用_markdown 格式
  13. 三调业务摘要201709
  14. vs2008 sp1 C++ 发布程序
  15. 手游本地化不得不看的10条规则
  16. 实变函数与泛函分析知识点整理
  17. expdp报错ORA-39002: invalid operation,ORA-39070: Unable to open the log file
  18. 《应对焦虑》学习总结
  19. 卓有成效的管理者|木深读书笔记
  20. Tensorflow Keras模型和Estimator有什么区别?

热门文章

  1. 加速度jsudo:电子元器件商城网站功能测评——华强电子
  2. HarmonyOS服务开放平台全面了解
  3. Docker工具之Daocloud的使用
  4. 局域网传输工具需求分析
  5. 第七章-复用类-继承语法-1
  6. 计算机绘图R25,(学生)计算机绘图课程设计.doc
  7. 面向流动人口管理的人脸验证系统设计及实现 论文+答辩PPT+项目工程文件
  8. 双麦回音消除+噪音抑制+远场拾取模块 A-51
  9. 携程并了去哪儿,互联网业7:2:1法则几成定律
  10. 软工网络15结对编程练习(201521123007谭燕)