24.redis高性能
Redis的单线程和高性能
Redis是单线程吗?
Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。
Redis 的多线程部分,比如持久化、异步删除、集群数据同步等,其 实是由额外的线程执行的。
Redis 单线程为什么还能这么快?
由于 Redis 的所有数据均存于内存之中,其所有运算也都是内存级别的操作。同时,Redis 是单线程的,这避免了多线程切换带来的性能损耗问题。但也正因为 Redis 是单线程,在使用 Redis 指令时需格外小心。对于那些较为耗时的指令(例如 keys),务必谨慎使用,否则很容易导致 Redis 出现卡顿现象。
Redis 单线程如何处理那么多的并发客户端连接?
Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
# 查看redis支持的最大连接数,在redis.conf文件中可修改,
# maxclients 10000 2 127.0.0.1:6379> CONFIG GET maxclients ##1) "maxclients" ##2) "10000"