redis 复制,持久化,事务

时间:2022-05-17 20:32:21

持久化(数据存储到硬盘)

  • 有两种方式:快照 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还可用来批量提交命令提高执行效率