redis基础面试题

基于想提升自身代码基础的考虑,从网络上获取redis的面试题,来进行对redis基础的学习

1 redis 为什么快

Redis的速度⾮常的快,单机的Redis就可以⽀撑每秒十几万的并发,相对于MySQL来说,性能是MySQL的⼏⼗倍。速度快的原因主要有⼏点:

  1. 完全基于内存操作
  2. 使⽤单线程,避免了线程切换和竞态产生的消耗
  3. 基于⾮阻塞的IO多路复⽤机制
  4. C语⾔实现,优化过的数据结构,基于⼏种基础的数据结构,redis做了⼤量的优化,性能极⾼

2 什么是I/O多路复用

引用知乎上一个高赞的回答来解释什么是I/O多路复用。假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择:

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

第一种就是阻塞IO模型,第三种就是I/O复用模型。

Linux系统有三种方式实现IO多路复用:select、poll和epoll。

例如epoll方式是将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。

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

相关推荐
Flynt6 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
Song_RsHt11 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
GottdesKrieges14 小时前
Redis哨兵模式新建用户和修改口令
数据库·redis
爱好曙光16 小时前
Redis Cluster 槽迁移:MOVED 重定向与拓扑刷新实战
redis·cluster·性能调优·moved·槽迁移
萨小耶17 小时前
AI 面试答题链路源码分析:Redis 幂等、题目锁与状态机如何配合
人工智能·redis·面试
ZealSinger17 小时前
Boot4升后session_redis属性怎么改名
redis·springsession·boot4·升级踩坑
牧瀬クリスだ18 小时前
Redis五大数据类型全解析:从入门到实战
java·数据库·redis·后端·缓存
我不会插花弄玉18 小时前
5.Hash 【由浅入深-redis】
redis·算法·哈希算法
Java小生不才19 小时前
SPRING AI向量化
redis·spring ai
Lucis__1 天前
Redis持久化机制解析
redis·缓存·操作系统·文件·非关系型数据库·1024程序员节