1.Redis是单线程吗?
不完全是单线程。
一般说Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,这里也是Redis 对外提供键值存储服务的主要流程。
Redis的其他功能:持久化、异步删除、集群数据同步等,都是由额外的线程执行的。
2.Redis 单线程为什么还能这么快?
数据都是在内存中,操作也是在内存中操作,且单线程避免了线程间的切换而损耗的开销。
3. Redis 单线程如何处理并发客户端连接?
Redis的IO多路复用机制
redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到 文件事件分派器,事件分派器将事件分发给事件处理器。
4.Redis的一些高频命令
Keys:全局遍历键
用来列出所有满足特定正则字符串规则的key,当redis数据量比较大时, 性能比较差,要避免使用
例:
遍历所有:keys *
查询所有以 a 开头的键:keys a*
scan:渐进式遍历键
格式:SCAN cursor [MATCH pattern] [COUNT count]
- cursor:整数值(hash桶的索引值)
- MATCH pattern:key 的正则模式
- COUNT count:一次遍历的key的数量(不精确,会波动)
第 一次遍历时,cursor 值为 0,然后将返回结果中第一个整数值作为下一次遍历的 cursor。一直遍历 到返回的 cursor 值为 0 时结束。
注意点:遍历过程中如果有新键插入,可能会遍历不到。
info:查看redis服务运行信息
- Server : 服务器运行的环境参数
- Clients : 客户端相关信息
- Memory : 服务器运行内存统计数据
- Persistence :持久化信息
- Stats : 通用统计数据
- Replication :主从复制相关信息
- CPU : CPU 使用情况
- Cluster :集群信息
- KeySpace :键值对统计数量信息