• 关于

    多分派有什么用

    的搜索结果

问题

【Java问答学堂】13期 redis 和 memcached 有什么区别?

【Java问答学堂】13期 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候...
剑曼红尘 2020-05-06 14:37:41 0 浏览量 回答数 1

回答

【Java问答学堂】13期 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什么都不知道? 还有可能面试官会问问你 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 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。 文件事件处理器的结构包含 4 个部分: 多个 socketIO 多路复用程序文件事件分派器事件处理器(连接应答处理器、命令请求处理器、命令回复处理器) 多个 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 语言实现的程序“距离”操作系统更近,执行速度相对会更快。单线程反而避免了多线程的频繁上下文切换问题,预防了多线程可能产生的竞争问题。 往期回顾: 【Java问答学堂】1期 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? 【Java问答学堂】2期 如何保证消息队列的高可用? 【Java问答学堂】3期 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? 【Java问答学堂】4期 如何保证消息的可靠性传输?(如何处理消息丢失的问题?) 【Java问答学堂】5期 如何保证消息的顺序性? 【Java问答学堂】6期 如何解决消息队列的延时以及过期失效问题? 【Java问答学堂】7期 如果让你写一个消息队列,该如何进行架构设计? 【Java问答学堂】8期 es 的分布式架构原理能说一下么(es 是如何实现分布式的啊)? 【Java问答学堂】9期 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊? 【Java问答学堂】10期 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 【Java问答学堂】11期 es 生产集群的部署架构是什么?每个索引的数据量大概有多少? 【Java问答学堂】12期 项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?
剑曼红尘 2020-05-06 14:37:53 0 浏览量 回答数 0

问题

Redis 和 Memcached 的区别?Redis 的线程模型是什么?【Java问答学堂】31期

面试官心理分析 这个是问 Redis 的时候,最基本的问题吧,Redis 最基本的一个内部原理和特点,就是 Redis 实际上是个单线程工作模型,你要是这个都不知道,那...
剑曼红尘 2020-06-03 20:28:14 28 浏览量 回答数 1

问题

【RDS教程】之RDS的空间组成

    最近论坛里面有很多用户在问:     为什么我数据库还没有迁上来,RDS的已用空间已经有500多兆了?     为什么服务器上数据库只有七八百兆,但是迁到RDS上就有3G多了?     那么,RDS上的这...
belle.zhoux 2019-12-01 21:57:55 16659 浏览量 回答数 8

问题

【RDS教程】之RDS的空间组成

    最近论坛里面有很多用户在问:     为什么我数据库还没有迁上来,RDS的已用空间已经有500多兆了?     为什么服务器上数据库只有七八百兆,但是迁到RDS上就有3G多了?     那么,RDS上的这...
belle.zhoux 2019-12-01 22:02:09 9923 浏览量 回答数 7

回答

放ssd 上 ######这样不能说什么优化吧,要么就根据行为进行优化,比如一段时间内 某几个文件的访问量最大,数据读写最频繁,那就在一段时间内不重复的打开这个文件,文件打开后缓存起来。可以参考操作系统里面的内存置换算法LRU,,我也没头绪了。###### TB级很多么? 我们光文件就有10亿多个,每个文件大小在300M到2G之间 做存储升级的时候,通过光纤拷贝到新的存储系统,花了大约三个月时间 ######请问您的系统是如何实现快速存取历史数据的?谢谢###### ssd是啥?对不起我是新手, 多谢明月兄的回答:可能我上面描述地有点儿乱,我重新说: 其实就是有大量csv文件,每个文件的文件名都不同,而且还是按照日期分别存放到不同的目录,而且是不断有新目录和新csv文件进来, 问题如何快速访问已经存在的csv文件中的内容,不需要更新只要取到数据就行,自己写程序倒是可以访问,如果有比较成熟的解决方案或开源框架就比较好了,   opal 兄:你们是如何快速访问历史数据的? ######放到HDFS中,读取用MAP/REDUCE做,非常适合。######回复 @PaulWong : 非常感谢######官方那个WORDCOUNT那个例子就是最简单的了。 主要过程: 搭建HADOOP在本机的伪分布式环境,需要LINUX系统 跑通WORDCOUNT例子 搭建本机的开发环境,主要是WINDOWS,写一个MAP/REDUCE JOB,通过ECLIPSE分派到远程HADOOP中运行######感谢PaulWong,我查了查资料,大概看懂意思,不过还是搞不出东西来, 请问您有更详细的资料或java语言的demo吗?非常感谢
kun坤 2020-06-06 16:16:15 0 浏览量 回答数 0

问题

Netty实现原理浅析 1、总体结构 2、网络模型 3、 buffer 4、Ch?400报错

Netty实现原理浅析 1、总体结构 2、网络模型 3、 buffer 4、Channel 5、ChannelEvent 6、ChannelPipeline 7、codec framework 8、小结? 400 报错 Netty是JBo...
爱吃鱼的程序员 2020-06-04 11:53:36 3 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板