-
主从复制
-
主从复制方法
只需要在redis.conf中,添加slaveof 127.0.0.1 6379
即可成为127.0.0.1:6379的从库 -
主从复制的过程
- 当配置好slave后,slave与master建立连接,然后发送sync命令。
- 无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
- 后台进程完成写文件后,master就发送文件给slave,slave把文件保存到硬盘上,再加载到内存中。
- 接着master把缓存的写命令转发给slave,后续再把收到的写命令发送给slave。
- 如果同时有多个slave发来同步连接命令,master只会启动一个进程来写数据库镜像,并发送给所有的slave。
-
主从复制的特点
- master可以有多个slave
- 多个slave可以连接到同一个master外,还可以连接到其他的slave。
- 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求。
- 提高系统的伸缩性。
-
-
事务
-
事务特性
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
-
用法
MULTI 命令用于开启一个事务,它总是返回OK
。
MULTI 执行之后, 客户端可以继续向服务器发送任意多条命令, 这些命令不会立即被执行, 而是被放到一个队列中。
当 EXEC命令被调用时, 所有队列中的命令才会被执行。
当执行 DISCARD 命令时, 事务会被放弃, 事务队列会被清空, 并且客户端会从事务状态中退出 -
事务中的错误
执行之前:从 Redis 2.6.5 开始,服务器会对命令入队失败(比如语法错误,内存不足等)的情况进行记录,并在客户端调用 EXEC 命令时,拒绝执行并自动放弃这个事务。
执行之后:至于那些在 EXEC 命令执行之后所产生的错误, 并没有对它们进行特别处理: 即使事务中有某个/某些命令在执行时产生了错误, 事务中的其他命令仍然会继续执行。 -
乐观锁Wach
WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为(乐观锁)。# 客户端1 multi set name aaa # 客户端2 set name bbb get name # bbb # 客户端1 exec # ok, 说明事务执行成功 get name # bbb,事务成功了,但是获取到的name却不是想要的结果
使用Watch防止这种情况发生
# 客户端1 watch name multi set name aaa # 客户端2 set name bbb get name # bbb # 客户端1 exec # nil 由于watch的name被别的客户端修改,因此事务执行失败
WATCH 使得 EXEC 命令需要有条件地执行: 事务只能在所有被监视键都没有被修改的前提下执行, 如果这个前提不能满足的话,事务就不会被执行。
-
-
发布订阅(PUB/SUB)(消息队列)
发布订阅是一种消息通信模式,类似于设计模式中的观察者模式。主要可以解决发布者和订阅者之间的耦合关系(二者之间没有代码级别,物理级别的依赖关系)。可以通过publish发布消息,通过subscribe或者psubscribe方式订阅消息
# 客户端1 subscribe tv1 # 客户端2 subscribe tv1 tv2 #客户端3 publish tv1 tv1-message1 publish tv2 tv2-meesage1 # 此时客户端1收到 tv1-message1 # 此时客户端2收到 tv1-message1 tv2-message1 # 客户端4 psubscribe tv* #订阅所有tv开头的频道
网友评论