Redis事务简介:可以一次执行多个命令,本质是一组命令的集合,一个事物中的所有命令都会序列化,按顺序的串行化执行而执行,不会被其他命令插入,不许加塞,即在一个对列中,一次性、顺序性、排他性的执行一系列命令
常用命令:
1,discard:取消事务,放弃执行事务块内的所有命令
2,EXEC:执行所有事务块内的命令
3,multi:标记一个事务块的开始
4,UNwatch:取消watch命令对所有key的监视
5,watch key [key…]:监视一个(或多个)key,如果事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断
注:Redis事务是不保证原子性,即执行有问题不会连坐,但编译期间有问题会
Redis事务的3个阶段:
1,开启:以MULTI开启一个事务
2,入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面
3,执行:由EXEC命令触发事务
Redis事务特性:
1,单独的隔离操作:事务中的所有命令都会序列化、按顺序的执行。事务在执行过程中,不会被其他客户端发送来的命令请求所打断
2,没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行,也就不存在“事务内的查询要看到事务里的更新,在事务外查询不能看到”这个问题
3,不保证原子性:Redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚,即部分支持事务
Redis消息订阅发布简介(即消息中间件,虽Redis有这个功能,但企业很少用到此技术):进程间的一种消息通信模式:发送者发送信息,订阅者接受信息
常用命令:
1,psubscribe pattem [pattem…]:订阅一个或多个符合给定模式的频道
2,pubsub subcommand [argument [argument…]]:查看订阅与发布系统状态
3,publish channel message:将消息发送到指定的频道
4,punsubscribe [patttern[pattern…]]:退订所有给定模式的频道
5,subscribe channel [channel…]:订阅给定的一个或多个频道的信息
6,unsubscribe [channel[channel…]]:指退订给定的频道
Redis主从复制简介: 主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主,主要作用为读写分离和容灾恢复
用法:
1,配从(库)不配主(库)
2,从库配置:slaveof主库IP 主库端口:
1,每次与master断开之后,都需要重新连接,除非你配置进Redis.conf文件。
2,Info replication(查询信息)
3,修改配置文件细节操作:
1,拷贝多个Redis.conf文件
2,开启daemonize yes
3,pid文件名字
4,指定端口
5,Log文件名字
6,Dump.rdb名字
4,常用:
1,一主二仆
1,一个master,两个slave
2,主机宕机,从机不会上位,会保持待命
3,从机宕机,需从新与主机连接,除非将配置写到配置文件Redis.conf中
2,薪火相传
1,上一个slave可以是下一个slave的master,slave同样可以接受其他slave是的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力
2,中途变更转向:会清除之前的数据,重新建立拷贝最新的
3,slaveof 新主库IP 新主库端口
3,反客为主
1,slaveof no one :使当前数据库停止与其他数据库的同步,转成主数据库
复制原理:
1,slave启动成功连接到master后会发送一个sync命令
2,master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave已完成一次完全同步
3,全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
4,增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
哨兵模式(sentinel,简单说反客为主自动版):反客为主自动版,能够后台监控主机是否故障,如果故障了,根据投票数自动将从库转换成主库,一组sentinel能同时监控多个master
使用步骤:
1,调整结构,一主二从
2,自定义目录下新建sentinel.conf文件,注:文件名字决不能错
3,配置哨兵,填写内容:
1,sentinel monitor 被监控的主机名(自己起个名字,用作标识) 被监控的主机 端口(默认6379) 1
2,上面最后的数字1,表示主机挂掉后slave投票看让谁接替主机,得票数多的接替主机
4,启动哨兵:Redis-sentinel sentinel.conf所在的目录/sentinel.conf
5,正常主从演示
6,master宕机
7,投票新选
8,重新主从继续开工,info replication
9,宕机的master恢复,此时该master会变成slave
复制的缺点:复制延时,由于所有的写操作都是先在master上操作,然后同步更新到slave上,所以master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟会更加严重,slave机器数量的增加也会使这个问题更加严重
Redis集群简介:Redis集群实现了对Redis的水平扩容,即启动n个Redis节点,将整个数据库分布存储在这n个节点中,每个节点存储总数据的1/n
redis 集群通过分区来提供一定程度的可用性:即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求
一个Redis集群包含了16384个插槽,数据库中的每个键都属于这16384个插槽的其中一个,集群使用公式crc16(key)%16384来计算键key属于哪个槽,其中crc16(key)语句用于计算键key的crc16的校验和,集群中的每个节点负责部分插槽,注:一般每各节点都会主从复制
注:Redis集群并不支持处理多个keys的命令,即mget、mset,因为这需要在不同节点间移动数据,从而达不到像Redis那样的性能,在负载的情况下可能会导致不可预料的错误,
Redis-cli 客户端提供了 -c参数实现自动重定向
虽然不支持处理多个keys的命令,但可以通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到同一个slot中去
可能Redis集群笔记不太详细,复习需再观看借鉴其他大佬的博客文章
