java面试题《redis篇》一

本文解析Redis作为键值对数据库的快速原理,涉及内存存储、C语言优化、单线程模型和IO多路复用,揭示其为何速度惊人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Redis?
Redis(Remote Dictionary Server)远程字典服务,是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同,Redis中的值可以是由string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)等多种数据结构组成,能够满足很多的应用场景,同时Redis会将所有数据都存放在内存中,读写速度非常快。

基本特性:
基于键值对、读写速度快、数据结构丰富、简单稳定、支持持久化、支持事务(原子性)、主从复制、高可用与分布式。

为什么说Redis的速度非常快呢?
据官方给出的数字,Redis的读写性可以达到10万/秒,在不考虑硬件性能的化,redis速度如此快的原因可以归纳为一下几点:
(1)Redis中所有数据都是存储在内存中的,CPU对计算器的访问速度中内存远快于外存
(2)Redis是基于C语言实现的,一般来说C语言距离操作系统更近,执行速度相对更快
(3)Redis采用了单线程架构,避免了不必要的上下文切换和竞争条件,线程安全
(4)使用多路 I/O 复用模型,非阻塞 IO;

单线程详解:

Reds基于 Reactor模式开发的文件事件处理器,它是单线程的,所以Redis才叫做单线程的模型。
该处理器采用IO多路复用机制来同时监听多个Socket,根据Socket上的事件类型来选择对应的事件处理器来处理这个事件。可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了 Redis内部的线程楼型的简单性。
文件事件处理器的结构包含4个部分:多个Socket,IO多路短用程序、文件事件分派器以及事件处理器
多个 Socket可能井发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个Socket,会将 Socket放入一个队列中排队,每次从队列中取出一个 Socket给事件分派器,事件分派器把 Socket给对对应的事件处理器,然后一个 Socket的事件处理完之后,IO多路复用程序才会将队列中的下一个 Socket给事件分派器,文件事件分派器会根据每个 Socket当前产生的事件,来选择对应的事件处理器来处理。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值