- redis是单线程还是多线程?
redis是单线程的,主要是指网络I/O线程。Redis的持久化,集群同步等操作,则由另外的线程来执行。
2 . redis是单线程,为什么处理这么快?
Redis的大部分操作都是在内存中完成。单线程模型避免了多线程之间的竞争,redis采用了I/O多路复用机制处理大量的客户端Socket请求。
- redis版本差异
redis4.0版本之后,Redis添加了多线程的支持,但这时的多线程主要体现在大数据的异步删除 功能上。
redis6.0版本之后,新增了多线程I/O的读写并发能力。
4 redis是怎么实现数据不丢失的?怎么实现服务高可用的 ?
为了保证数据不丢失,要把内存中的数据存储到磁盘,以便缓存服务器重启之后,还能够从磁盘中恢复原有的数据,这个过程就是redis的持久化。
Redis持久化的三种方式:
1)AOF的日志如何实现
- Redis为什么先执行命令 ,再把数据写入日志?
也会带来风险
1)数据可能会丢失
2)可能阻塞其他操作
2、RDB快照如何实现?
为了解决AOF做故障恢复时操作缓慢这个问题,Redis增加了内存快照的操作,即可以可靠,又能在宕机时快速恢复。
RDB记录redis某一时刻的数据,不像AOF那样 记录操作,所以在 数据恢复的时候。只需要把RDB文件读如内存,完成快速恢复。
- RDB做快照时会阻塞线程吗 ?
save会导致阻塞,bgsave不会阻塞线程。 - RDB做快照的时候,数据能修改吗?
可以修改,利用了bgsave的子进程。
1)如果主线程,执行读操作,则主线程和bgsave子进程互相不影响
2)如果主线程,执行写操作,则被修改的数据会复制一份副本,然后bgsave子进程会把该副本数据写入RDB文件,在这个过程中,主线程仍然可以直接修改原来的数据。
在Redis4.0之后,增加了AOF和RDB混合的数据持久化机制,把数据以RDB的方式写入文件,再将后续的操作命令以AOF的格式存入文件,既保证了redis的重启速度,又降低数据丢失风险。
- redis如何实现服务高可用?
1)主从同步。 2)哨兵模式 3)redis集群模式 - 主从同步(主从复制)
- 哨兵模式
- redis集群