好文收集之Redis : 面试题

面试 = 水平测试,并不是面试官要为难你,是要确定你的水平

  • 天下无难试之Redis面试刁难大全

    这几个题,讲的很全面,言简意赅。并且对问题有深度。

    • Redis有哪些数据结构?
    • 使用过Redis分布式锁么,它是什么回事?
    • 假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
    • 使用过Redis做异步队列么,你是怎么用的?
    • 如果有大量的key需要设置同一时间过期,一般需要注意什么?
    • Redis如何做持久化的?
    • Pipeline有什么好处,为什么要用pipeline?
    • Redis的同步机制了解么?
    • 是否使用过Redis集群,集群的原理是什么?有哪几种集群方式?各有什么好坏?
    • Redis是单线程还是多线程?
    • Redis 可以处理的并发量?
    • Redis 为什么那么快?
      • 纯内存操作
      • I/O 多路复用
  • I/O多路复用技术(multiplexing)是什么?

    专门针对I/O多路复用技术做了了解,因为对Linux底层技术不了解,这里有个例子,算是明白了I/O多路复用是干嘛的了。

    =========

    下面举一个例子,模拟一个tcp服务器处理30个客户socket。假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择:

    1. 第一种选择:按顺序逐个检查,先检查A,然后是B,之后是C、D。。。这中间如果有一个学生卡主,全班都会被耽误。这种模式就好比,你用循环挨个处理socket,根本不具有并发能力。
    2. 第二种选择:你创建30个分身,每个分身检查一个学生的答案是否正确。 这种类似于为每一个用户创建一个进程或者线程处理连接。
    3. 第三种选择,你站在讲台上等,谁解答完谁举手。这时C、D举手,表示他们解答问题完毕,你下去依次检查C、D的答案,然后继续回到讲台上等。此时E、A又举手,然后去处理E和A。。。

    这种就是IO复用模型,Linux下的select、poll和epoll就是干这个的。将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。

    这样,整个过程只在调用select、poll、epoll这些调用的时候才会阻塞,收发客户消息是不会阻塞的,整个进程或者线程就被充分利用起来,这就是事件驱动,所谓的reactor模式。

    ================

    自己的理解:

    Redis是采用TCP连接的,连接TCP的socket在所有数据准备好之前,socket不可用。请求是进来了,数据包还不完整,所以还不能处理这个请求。

    那么对于已经准备数据包的socket,Redis线程可以一次性这些请求都接收来,然后去内存处理。都处理完后,将结果再都带回到socket。接下来再去处理准备好的socket。

    所以redis的多路复用,不是每一个请求处理一次,而是一次处理多个请求。所以纯内存操作的单线程,效率也很高。

转载于:https://my.oschina.net/ElEGenT/blog/3010524

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值