Redis:哨兵机制与事务及缓存策略Season2:其四
Posted 漫步君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis:哨兵机制与事务及缓存策略Season2:其四相关的知识,希望对你有一定的参考价值。
什么是哨兵机制?
Redis的哨兵(Sentinel)系统用于管理集群中的多个Redis服务,并且可以进行监控选举策略、心跳检测。他是一个独立的一个应用程序,主要提供一下几个功能:
1.监控(Monitoring):哨兵会不断检查Master和Slave是否正常;
2.提醒(Notification):当被监控的某个Redis出现问题时,哨兵可以通过API向管理员或者其他应用程序发送通知;
从上面可以看出,哨兵机制的原理与Zookeeper非常相似。
配置哨兵机制的配置文件是:sentinel.conf文件
哨兵是一个分布式系统,我们可以在一个架构中运行多个哨兵进程。这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
每个哨兵会向其它哨兵、Master、Slave定时发送消息,以确认对方是否存活。如果发现对方在指定时间(可配置)内未回应,会暂时认为对方已挂(主观认为宕机,Subjective Down简称sdown)。
若哨兵群中的半数以上哨兵都报告某一Master没响应,则系统才认为该Master彻底死亡(即:客观上的真正down机,ObjectiveDown简称odown)。通过一定的选举vote算法,从剩下的Slave节点中选一台提升为Master,然后自动修改相关配置。
虽然哨兵释出为一个单独的可执行文件redis-sentinel,但实际上它只是一个运行在特殊模式下的Redis服务器,我们可以在启动一个普通Redis服务器时通过给定--sentinel选项来启动哨兵。
配置哨兵机制后,一般先启动Master再启动Slave,最后再启动哨兵。
在集群情况下,集群中所有的服务器都要开启密码,并且相同。
Redis 事务可以一次执行多个命令,并且带有以下两个重要的保证:
事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
在Redis中使用multi开启事务;使用exec提交事务,使用discard回滚事务。在项目中,通常自定义注解使用AOP技术对事务进行封装。
那么非关系型数据库Redis与关系型数据库mysql都有哪些异同呢?
相同点:都需要进行建立连接(网络连接),Ehcache本地缓存则不需要网络连接;
不同点:在存放介质时,Redis存放在在内存中(持久化机制会持久化到硬盘上),而数据库时直接持久化到硬盘上;从效率上来说,因为MySQL需要做磁盘I/O所以性能比Redis直接操作内存要低很多。
当使用Redis+MySQL实现查询缓存时,如果Redis在高并发情况下宕机、或者缓存的key集体失效后,大量的请求会突然直接操作数据库导致数据库压力变大,严重的话引起雪崩效应。
所以我们一般采用Ehcache+Redis+MySQL实现一级缓存+二级缓存来提高系统的运行效率,目的是减轻Redis和MySQL的压力,提高访问速度。
使用Ehcache和Redis实现一级缓存和二级缓存的时候,有两种方案:
第一种:一级缓存使用Redis、二级缓存使用Ehcache,可以当Redis挂了后,保证有备用的本地缓存(本地JVM),但这种方案并不是很好;
第二种:一级缓存使用Ehcache、二级缓存使用Redis,缓存先走本地,如果本地没有在通过建立连接通过网络请求查询二级缓存Redis,这样查询效率会比较高。
那么缓存的过期时间如何控制呢?
通常一级缓存的过期时间都会比二级缓存的过期时间要短(因为代码运行也需要时间,所以两个超时时间也不要相同)。
以上是关于Redis:哨兵机制与事务及缓存策略Season2:其四的主要内容,如果未能解决你的问题,请参考以下文章
Redis----常见重点知识2(主从复制哨兵机制缓存穿透和雪崩)
Redis----常见重点知识2(主从复制哨兵机制缓存穿透和雪崩)