客户问题:
redis和memcached有什么区别?redis的线程模型是什么?为什么redis单线程却能支撑高并发?
凯铧互联技术回复:
redis最基本的一个内部原理和特点,就是redis实际上是个单线程工作模型, memcached是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是redis,很少公司用memcached了。
redis和memcached有啥区别?
1、redis 支持复杂的数据结构
redis相比memcached来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis会是不错的选择。
2、redis原生支持集群模式
在redis3.x版本中,便能支持cluster模式,而memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据。
3、性能对比
由于redis只使用单核,而memcached可以使用多核,所以平均每一个核上redis在存储小数据时比 memcached性能更高。而在100k以上的数据中,memcached性能要高于redis。虽然redis最近也在存储大数据的性能上进行优化,但是比起memcached,还是稍有逊色。
redis 的线程模型
redis内部使用文件事件处理器file event handler,这个文件事件处理器是单线程的,所以redis 才叫做单线程的模型。它采用IO多路复用机制同时监听多个socket,将产生事件的socket压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。
文件事件处理器的结构包含 4 个部分:
多个socket
IO多路复用程序
文件事件分派器
事件处理器(连接应答处理器、命令请求处理器、命令回复处理器) 多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。
来看客户端与redis的一次通信过程:
要明白,通信是通过socket来完成的,不懂的同学可以先去看一看socket网络编程。
首先,redis 服务端进程初始化的时候,会将 server socket 的 AE_READABLE 事件与连接应答处理器关联。
客户端 socket01 向 redis 进程的 server socket 请求建立连接,此时 server socket 会产生一个 AE_READABLE 事件,IO 多路复用程序监听到 server socket 产生的事件后,将该 socket 压入队列中。文件事件分派器从队列中获取 socket,交给连接应答处理器。连接应答处理器会创建一个能与客户端通信的 socket01,并将该 socket01 的 AE_READABLE 事件与命令请求处理器关联。
假设此时客户端发送了一个 set key value 请求,此时 redis 中的 socket01 会产生 AE_READABLE 事件,IO 多路复用程序将 socket01 压入队列,此时事件分派器从队列中获取到 socket01 产生的 AE_READABLE 事件,由于前面 socket01 的 AE_READABLE 事件已经与命令请求处理器关联,因此事件分派器将事件交给命令请求处理器来处理。命令请求处理器读取 socket01 的 key value 并在自己内存中完成 key value 的设置。操作完成后,它会将 socket01 的 AE_WRITABLE 事件与命令回复处理器关联。
如果此时客户端准备好接收返回结果了,那么 redis 中的 socket01 会产生一个 AE_WRITABLE 事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对 socket01 输入本次操作的一个结果,比如 ok,之后解除 socket01 的 AE_WRITABLE 事件与命令回复处理器的关联。
这样便完成了一次通信。关于 Redis 的一次通信过程,推荐读者阅读《Redis 设计与实现——黄健宏》进行系统学习。
为啥 redis 单线程模型也能效率这么高?
纯内存操作。
核心是基于非阻塞的 IO 多路复用机制。
C 语言实现,一般来说,C 语言实现的程序“距离”操作系统更近,执行速度相对会更快。
单线程反而避免了多线程的频繁上下文切换问题,预防了多线程可能产生的竞争问题。
本文适用于:
redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
阿里云代理商凯铧互联提醒您:
如果您对阿里云虚拟主机数据有修改、变更等风险操作,务必注意阿里云虚拟主机备份,确保数据安全。
如果您对实例(包括但不限于 ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
如果以上回复对您的问题还未能解决,请联系凯铧互联售后技术支持。阿里云代理商凯铧互联提供阿里云服务器/企业邮箱等产品的代购服务,同样的品质,更多贴心的服务,更实惠的价格。阿里云代理商凯铧互联会为您提供一对一专业全面的技术服务,同时还能为您提供阿里云其他产品购买的专属折扣优惠。通过凯铧互联购买可以获得折上折优惠!若您需要帮助可以直接联系我方客服,阿里云代理商凯铧互联专业技术团队为您提供全面便捷专业的7x24技术服务。 电话专线:136-5130-9831,QQ:3398234753。
为什么选择凯铧互联购买阿里云产品:北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯服务器运维团队,团队90%的成员均是超过10年具备专业运维经验的精英。作为阿里云,腾讯云,百度云,金山云,华为云重要的合作伙伴,凯铧互联专注于为企业用户提供云计算及云服务器解决方案。公司总部设在北京,并在内蒙设有办事处,服务全国各地企业,与互联网专业公司及主流服务商建立了良好合作关系。
凯铧互联始终坚持帮助企业节省成本、提高效率、创造价值的原则,力求为企业及创业型团队 提供可靠、安全、稳定的运维服务,与之共同成长。做为一家综合性方案商,为用户获得优质服务的同时,秉承"专业规划、周到服务"的服务理念,根据用户的实际情况,充分考虑各种网络资源的特点及功效,为用户量身定做一套适合于其实际应用需求的网络应用方案。帮助用户利用互联网的力量展开新的营销方式,并大大缩短了项目实施周期,获得用户的一致好评!
公司官网:www.bjkaihua.com;腾讯云网站www.bjkaihua.net.cn; 阿里云业务网站:www.alibjyun.com。大家可以扫以下微信,一起交流!