持久化(数据存储到硬盘)
- 有两种方式:快照 snapshotting、追加文件AOF、
- 快照
1、执行 快照 的两种方式(命令)
BGSAVE:redis调用fork来创建一个子进程将快照写入硬盘,父进程继续处理请求;
(子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的拷贝。父子进程之间不共享这些数据,但共享代码空间)
fork子进程,会耗费内存,尤其是数据量比较大(如几十GB),BGSAVE会导致系统停顿;
SAVE:直接创建快照,完毕之前不会响应任何请求,会阻塞响应;
2、当系统发生崩溃,快照持久化有可能会丢失一部分数据,即上次快照之后的;
- AOF
1、配置 appendonly yes ,打开AOF
2、同步频率,指的是强制写入磁盘的时间设置, always(每个命令),everysec(每秒),no(让操作系统来决定);
复制(服务器之间数据拷贝)
事务(pipelining 流水线)
- 以 MULTI开始事务 ------传入多个命令--------- 以EXEC提交执行;
1、命令没有分次提交到服务器,而会成批量的提交到服务器;
2、成批量的提交可以减少通信,提高执行效率;
3、只有在EXEC命令提交后,事务的命令才会执行,这与关系数据库的实现是有区别的,在关系数据库中,多个操作是分开执行的,前置的操作对后置的操作是可见的;
- WATCH、UNWATCH、DISCARD 命令
1、WATCH命令 可以监视 键 的替换、更新、删除等操作,它只能监视到 键 这一层级;
2、WATCH可以看作是乐观锁,它不会锁定数据不让改变,它会在数据改变是 抛出异常(redis.exceptions.WatchError) 让程序做相应的处理;
3、UNWATCH 取消WATCH命令对所有key的监视;
4、DISCARD 取消事务,取消WATCH命令,并清空所有已入队的命令;
- 非事务型流水线
1、pipe还可用来批量提交命令提高执行效率