1.redis和memcache的区别

  • redis支持复杂的数据结构
  • redis支持原生集群模式
  • redis只使用单核,而memcache可使用多核。所以平均每一核上存储小数据redis的效率要高于memcache。高于100k的数据存储,memcache效率则要高于redis。

2.redis单线程为什么还这么快

  • 纯内存操作
  • 核心是基于I/O多路复用的机制
  • C语言实现的,更接近底层操作系统
  • 单线程避免了多线程频繁的上下文切换,避免了多线程可能产生的竞争问题

3. redis持久化的两种方法

RDB优缺点:
  • RDB会生成多个数据文件,每个数据文件都代表一个时刻redis中的数据;
  • RDB对redis对外提供的读写服务影响特别小,因为redis主进程fork出一个子进程,让子进程执行磁盘I/O操作进行RDB持久化;
  • 如果想在redis故障时尽可能少的丢失数据,AOF会比RDB好一些。因为RDB数据快照一般都是5分钟,或者更长时间生成一次,如果在这期间redis故障了,那这5分钟的数据就丢失了。
  • RDB在fork子进程进行快照生成的时候,如果数据文件特别大,那可能会导致对客户端提供的服务暂停数毫秒,甚至数秒。
AOF优缺点:
  • AOF可以保证更少的数据丢失,因为AOF模式会通过后台一个线程每秒执行一次fsync,将缓冲区的数据写入硬盘;
  • AOF日志文件以append-only模式写入,即在文件尾部追加写入的方式,所以就少了很多磁盘寻址的开销,写入的效率就很高,即便是文件尾部破损,也很容易修复;
  • AOF日志文件记录的是每一条执行的可读性语句,这个特性适用于灾难性误删的紧急恢复。举个例子:不小心执行了flushall清空了所有的数据,拷贝AOF文件,删除最后执行flushall的那条命令,在放回AOF文件,就可以通过自动恢复机制,恢复所有的数据;
  • 对于同一份数据而言,AOF日志文件通常会比RDB数据快照文件大;
  • AOF开启后,每秒会执行一次fsync(缓冲区写入硬盘文件),所以redis写入的QPS相对于RDB低;
03-05 16:16