redis问题记录?

168 阅读2分钟

问题列表:

1、如何高效的阅读Redis的源码?
2、一个K-V数据库应该有哪些组件和模块组成呢?
3、Redis的二进制安全是什么意思?
4、快速的Redis有哪些慢操作呢?
5、整数数组和压缩列表在查找时间复杂度方面并没有很大的优势,那为什么Redis还会把它们
作为底层数据结构呢?
答:a、内存利用率,数组和压缩列表都是非常紧凑的数据结构,它比链表占用的内存要少。Redis
是内存数据库,大量数据存到内存中,此时需要做到尽可能的优化,提高内存的利用率。
   b、数组对CPU高速缓存支持更友好,所以Redis设计时,集合数据元素较少情况下,默认采用
内存紧凑排列的方式存储,同时利用CPU高速缓存不会降低访问速度,当数据元素超过设定阈值后,
避免查询时间复杂度太高,转为哈希和跳表数据结构存储,保证查询效率。
6、为什么单线程Redis能那么快?
7、Redis单线程处理IO请求的潜在性能瓶颈有哪些?
答:a、使用复杂度过高的命令
   b、big key的操作
   ......
8、宕机了,Redis如何避免数据丢失?
9、AOF日志重写的时候,是由bgrewriteaof子进程来完成的,不用主进程参与,我们今天说的
非阻塞也是指子进程的执行不阻塞主进程。但是,重写过程中有没有其他潜在的阻塞风险?
10、AOF重写也有一个重写日志,为什么它不共享使用AOF本身的日志呢?
答:a、父子进程写同一个文件必然会产生竞争问题,控制竞争就意味着会影响父进程的性能。
   b、如果AOF重写失败了,那么原本的AOF文件相当于被污染了,所以重写一个新文件,失败的话
   直接删除就行,不会对原来的产生影响,重写完成之后,直接替换旧文件即可。
11、宕机后,Redis如何实现快速恢复?
12、主从库如何实现数据一致?
13、为什么主从库之间的复制不使用AOF呢?

会一直更新。。。