一、redis有哪几种数据结构?
set、zset、List、Hash、String
二、各类数据结构用于什么实际问题?
- list:依据ID遍历redis中数据,这时对数据进行删除,导致数据所在的逻辑页码发生变化的问题
- set:存储文章的标签
- zset:实现按点击量排序
三、存储在哪?数据容易丢失采用什么措施?
- 数据存储在内存中
- 内存中数据容易丢失,采用RDB和AOF进行持久化
- RDB是根据我们自己配置的时间或者手动去执行BGSAVE或SAVE命令,Redis就会去生成RDB文件
- AOF是把Redis服务器接收到的所有写命令都记录到日志中
四、redis是单线程,那RDB、AOF会耗时吗?
- RDB是一个定时事件,线程不断询问RDB是否准备就绪
- 就绪后,则调用besave,会fork出一个子进程,在fork时父线程是阻塞的,核心的处理命令请求和响应还是单线程
- AOF需要写文件,在写命令执行之后,追加写进buffer缓冲区
- 进而持久化需要进行存盘,提供多种存盘策略
- 每秒一次/每条命令都执行/从不存盘
- 启动一个线程去存盘,然而一直存盘会导致数据膨胀
- 从而fork出一个子进程,进行重写,即压缩