数据安全:使用数据持久化和复制来预防和应对系统故障
性能保障:防止数据出错、使用流水线来提升性能和诊断潜在性能问题。
- 将数据持久化至硬盘
- 将数据复制到其他机器
- 处理系统故障
- Redis事务
- 非事务型流水线(non-transactional pipeline)
诊断性能问题
数据持久化的2种方式
- 快照,适用于丢失小部分数据也没关系的情况
save会阻塞进程,但是不会创建子进程
bgsave会创建子进程导致redis停顿
- AOF持久化
save会阻塞进程,但是不会创建子进程
bgsave会创建子进程导致redis停顿
file.flush() 将缓冲区数据写入硬盘,但何时写入由操作系统决定
snyc同步操作会阻塞到指定文件被写入到硬盘为止
推荐appendfsync everysec选项,即时系统奔溃也能保证
乐观锁 & 悲观锁
关系数据库会在写入数据的时候加锁,但是这样做的缺点是其他想要访问的进程会被阻塞,这叫悲观锁。
Redis会在数据被抢先修改的情况下通知执行watch的客户端,不需要花时间等待,只需要在自己的事物执行失败的时候进行重试,这叫乐观锁。
总结
- 当一个进程创建子进程的时候,底层的操作系统会创建该进程的个副本。在Unix和类Unix系统上面,创建子进程的操作会进行如下优化:在刚开始的时候,父子进程共享相同的内存,直到父进程或者子进程对内存进行了写入之后,对被写入内存的共享才会结束。
- ACID是指原子性 (atomicity)、一致性 (consistency)、隔离性(isolation)和耐久性 (durability),如果一个数据库想要实现可靠的数据事务,那么它就必须保证ACID性质。
- 因为机器B原本就是一个从服务器,所以我们的客户端不能对它进行写入,并且在机器B执行快照操作之后,我们的客户端也不会与其他试图对机器B进行写入的客户端产生竞争条件。
0 Comments