Redis速度
1. Redis单线程模型
我们都知道Redis是缓存数据库,数据存放在内存中,然而Redis却使用单线程模型设计,这与我们的固有观念相冲突,为什么单线程的程序可以经受住百万级并发的考验呢?
事实上,Redis4.0之后的版本开始抛弃单线程模型这一设计,这样一来,原本使用单线程模型的Redis,也开始选择性的使用多线程模型。
1.1. Redis最初版本为什么使用单线程模型进行设计?
- Redis服务中运行的绝大多数操作的性能瓶颈都不是CPU。
我们在一个普通的 Linux 服务器上启动 Redis 服务,它也能在 1s 的时间内处理 1,000,000 个用户请求。
- 使用单线程也可以并发处理客户端请求(IO多路复用)。
- 使用单线程模型更好维护。
1.2. 引入多线程
Redis 在最新的几个版本中加入了一些可以被其他线程异步处理的删除操作,如 UNLINK、FLUSHALL ASYNC 和 FLUSHDB ASYNC,为什么这些删除操作需要通过多线程的方式异步处理?
如果删除的键值占用的内存空间较小,可以用DEL命令删除一个键对应的值,这种情况下同步的删除这些键值也不会消耗太多时间。问题是Redis有些超大键值对占用空间非常大,几十MB甚至几百MB的数据不能在几毫秒的时间内处理完,此时Redis在释放内存空间上消耗较多时间,这些操作会阻塞待处理任务。
2. 总结
为什么Redis使用单线程,速度还会这么快呢?
因为Redis速度很快,快到没必要使用多线程。(1秒100万)