redis为什么是单线程的
内存操作,程序的瓶颈不在cpu而在I/O和网络开销
redis单线程的多路复用I/O
I/O是一种操作系统级别的指令 ,所以需要从用户内存空间调用内核内存空间指令,然后内核从外部加载数据到内核中,再返回数据到用户,这就导致用户在调用的时候会有阻塞,需要等待内核的数据准备加载完毕才能继续执行。所以redis用一个线程监听多个I/O,也就是多个I/O复用一个线程。实现方式有很多种,见下:
操作系统内存组成

image.png
在上述过程中,从用户态调用内核的操作,数据的加载和准备会阻塞用户区的线程。
过期策略
- 定时过期
- 惰性过期
- 定期过期
持久化机制
RDB (redis DataBase) :
默认方式
持久化是通过生成dump.rdb文件(快照文件)
在高并发下对redis的性能影响较低
可以接收一小段时间内的数据丢失 可以使用次方式
AOP( Append Only File) :
在高并发下对redis的性能影响较高
持久化是通过生成append.aof文件(保存的是指令)
每一次请求都会保存其指令
有rewrile机制,用以保证最小能还原数据的指令集(对同一key的修改指令只会保存最后一次)