一、redis事务
1、是什么
可以一次执行多个命令,本质时一组命令的集合。一个事务中所有的命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。
2、能做什么
一个队列中,一次性、顺序性、排他性的执行一系列命令
3、使用方式
1)常用命令
DISCARD : 取消事务,放弃执行事务块内所有相关命令
EXEC :执行所有事务块中的命令
MULTI:标记一个事务块开始
UNWATCH:取消WATCH命令对所有key的监视
WATCH key 【key.....】 监视一个或多个key,如果在事务执行之前这个或这些key被其他命令修改,那么事务被打断
2)watch命令类似于雷管所,事务提交时,如果key的值已经被改变,整个事务队列都不会被执行。通过watch命令在事务执行之前监控了多个keys,若在watch之后有任何key值发生变化,EXEC命令执行的事务都将被放弃,同时返回nullmulti-bulk应答已通知调用者事务执行失败
4、事务执行过程
1)开启:以MULTI开始一个事务
2)入队:将多个命令入队到事务中,接着这些命令并不会立即执行,而是放入事务队列中
3)执行:由EXEC命令触发事务并提交
5、三大特性
1、单独的隔离操作:事务中的所有命令都会序列化、按顺序的执行。事务在执行过程中,不会被其他客户端发送过来的命令请求所打断
2、没有隔离级别的概念:队列中的命令没有提交之前都不会被执行,因为事务提交之前任何指令都不会被实际执行。也不存在“事务内的查询要看到事务的更新,在事务外查询不能看到”这个让人头痛的问题
3、不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令任然会被执行,没有回滚。
二、发布订阅
1、是什么
进程间的一种通讯模式:发送者(pub)发送消息,订阅者(sub)接收消息
使用subscribe订阅消息
使用publish发布消息
2、常用命令
PSUBSCRIBE pattern 【pattern...】订阅一个或多个符合给定模式的频道
PUBSUB subcommand 【argument【argument...】】查看订阅与发布系统状态
PUBLISH channel message 将消息发送到指定的频道
PUNSUBSCRIBE 【pattern【pattern...】】退订所有给定模式的频道
SUBSCRIBE channel 【channel...】订阅给定的一个或多个频道信息
UNSUBSCRIBE 【channel【channel...】】只退订给定的频道
3、示例
三、redis主从复制
1、是什么
主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,master以写为主,slave以读为主
2、优势
读写分离、容错恢复
3、使用
1)配从不配主
2)从库配置: slaveof主库ip主库端口(每次与master断开之后都要重写连接,除非配置到redis.conf文件 info replication
3)修改配置文件:
a、拷贝多个redis.conf文件
b、开启daemonize yes
c、pid我呢见名称
d、指定端口
e、log文件名
f、dump.rdb名称
4)星火相传
上一个slave可以时下一个slave的master,slave同样可以接受其他slaves的连接和同步请求,那么该slave作为了链条中下一个master,可以有效减轻master的写压力,中途变更会清楚之前的数据,重写拷贝最新数据,
命令:slaveof ip 端口
5)反客为主
slaveof no one 使当前数据库停止与其他数据库的同步,转为主数据库
4、复制原理
slave启动成功连接到master后会发送一份sync命令,master接到命令后启动后台存盘进程,同时手机所有接受到的用于修改数据集命令, 在后台进程执行完成后,master将传送到整改数据文件到slave’,以完成第一个词完全同步
1)全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
2)增量复制:master继续向新的所有收集到的修改命令依次传给slave,完成同步,但是只要时重新连接master,一次完全复制将会自动执行
5、哨兵模式(sentinel)
Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案。sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换
四、redis的java客户端jedis