首页 > 作文

互联网常识:分享一些Redis中关于分布式缓存的面试题(附答案解析)

更新时间:2023-02-23 14:26:33 阅读: 评论:0

导读跟大家讲解下有关分享一些Redis中关于分布式缓存的面试题(附答案解析),相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说

跟大家讲解下有关分享一些Redis中关于分布式缓存的面试题(附答案解析),相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说分享一些Redis中关于分布式缓存的面试题(附答案解析),小编也收集到了有关分享一些Redis中关于分布式缓存的面试题(附答案解析)的香港公众假期相关资料,希望大家看到了会喜欢。

本篇文章给大家分享一些Redis中关于分布式缓存的面试题内含答案解析。有一定的参考价值有需要的朋友可以参考一下希望对大家有所帮助。

面试题

redis 和 memcached 有什么区别redis 的线程模型是什么为什么 redis 单线程却能支撑高并发

面试官心理分析

这个是问 redis 的时候最基本的问题吧redis 最基本的一个内部原理和特点就是 redis 实际上是个单线程工作模型你要是这个都不知道那后面玩儿 redis 的时候出了问题岂不是什么都不知道

还有可能面试官会问问你 redis 和 memcached 的区别但是 memcached 是早些年各大互联网公司常用的缓存方案但是现在近几年基本都是 redis没什么公司用 memcached 了。【相关推荐:Redis视频教程】

面试题剖析

redis 和 memcached 有啥区别

redis 支持复杂的数据结构

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

redis 原生支持集群模式

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

性能对比

由于 redis 只使用单核而 m东南大学成贤学院emcached 可以使用多核所以平均每一个核上 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 服务端进程初始化的时候会将 rver socket 的 AE_READABLE事件与连接应答处理器关联。

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

假设此时客户端发送了一个t key valu广东的大学排名e 请求此时 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 语言实现的程序“距离”操作系统更近执行速度相对会更快。单线程反而避免了多线程的频繁上下文切换问题预防了多线程可能产生的竞争问题。面试题

edis 的并发竞争问题是什么如何解决这个问题了解 redis 事务的 CAS 方案吗

面试官心理分析

这个也是线上非常常见的一个问题就是多客户端同时并发写一个 key可能本来应该先到的数据后到了导致数据版本错了;或者是多客户端同时获取一个 key修改值之后再写回去只要顺序错了数据就错了。

而且 redis 自己就有天然解决这个问题的 CAS 类的乐观锁方案。

面试题剖析

某个时刻多个系统实例都去更新某个 key。可以基于 zookeeper 实现分布式锁。每个系统通过 zookeeper 获取分布式锁确保同一时间只能有一个系统实例在操作某个 key别人都不允许读和写。

你要写入缓存的数据都是从 mysql 里查出来的都得写入 mysql 中写入 mysql 中的时候必须保存一个时间戳从 mysql 查出来的时候时间戳也查出来。

每次要写之前先判断一下当前这个 value 的时间戳是否比缓存里的 value 的时间戳要新。如果是的话那么可以写否则就不能用旧的数据覆盖新的数据。

更多编程相关知识请访问:编程视频!!

以上就是分享一些Redis中关于分布式缓存的面试题(附答案解析)的详细内容!

来源:php中文网

本文发布于:2023-02-23 14:26:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/167713359314708.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:互联网常识:分享一些Redis中关于分布式缓存的面试题(附答案解析).doc

本文 PDF 下载地址:互联网常识:分享一些Redis中关于分布式缓存的面试题(附答案解析).pdf

标签:事件   处理器   缓存   队列
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26 专利检索|