Redis面试题

1.Redis为什么快

1.基于内存存储

2.高效的数据结构

3.IO多路复用模型

4.单线程

IO多路复用

应用程序从磁盘中读取数据,经过了两个阶段,第一个阶段,使用recvform命令,尝试从内核中加载数据,如果没有数据,那么内核操作硬件拿到数据,这个过程需要等待;第二个阶段,内核把数据加载之后再写给用户的缓存区

如果是阻塞IO,那么从用户发起请求到读取数据,都会处于阻塞状态。

阻塞IO

非阻塞IO,在使用recvfrom加载数据时候,会立即返回结果而不会阻塞用户进程,如果没有加载到数据会继续发起请求。但是这种方式会发起多次recvfrom命令,造成cpu空转。

IO多路复用,当用户读取数据,不会去调用recvfrom函数,而是调用epoll函数,这个函数会将需要监听的数据交给内核,由内核检查这些数据是否就绪,如果数据就绪了,会通知应用程序来读取数据。这样可以避免发起多次recvfrom命令,降低CPU的压力。

单线程为什么快

而Redis是基于内存操作,执行速度很快,性能瓶颈在于网络延迟而不是执行速度,因此多线程不会带来巨大的性能提升。

而且在多线程的情况下会导致频繁的上下文切换,带来不必要的开销;

同时引入多线程会带来线程安全问题,就必须会使用锁机制来保证安全,这样实现复杂度变高,同时性能也会打折扣。

2.Redis过期Key的删除策略

1.周期删除

设置定时任务,周期性的抽取部分过期的key,然后删除

2.惰性删除

即并不是该key到期了就删除,而是该key过期后,redis查询该key发现过期了,就会把他删除掉

3.Redis内存回收策略

noevction:不淘汰,内存满的时候不允许加入新数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值