搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 漫步君 > Redis:哨兵机制与事务及缓存策略【Season2:其四】

Redis:哨兵机制与事务及缓存策略【Season2:其四】

漫步君 2019-04-04
举报

什么是哨兵机制?

Redis的哨兵(Sentinel)系统用于管理集群中的多个Redis服务,并且可以进行监控选举策略、心跳检测。他是一个独立的一个应用程序,主要提供一下几个功能:

1.监控(Monitoring:哨兵会不断检查MasterSlave是否正常;

2.提醒(Notification:当被监控的某个Redis出现问题时,哨兵可以通过API向管理员或者其他应用程序发送通知;

从上面可以看出,哨兵机制的原理与Zookeeper非常相似。

配置哨兵机制的配置文件是:sentinel.conf文件

 

哨兵是一个分布式系统,我们可以在一个架构中运行多个哨兵进程。这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master

每个哨兵会向其它哨兵、MasterSlave定时发送消息,以确认对方是否存活。如果发现对方在指定时间(可配置)内未回应,会暂时认为对方已挂(主观认为宕机,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实现一级缓存+二级缓存来提高系统的运行效率,目的是减轻RedisMySQL的压力,提高访问速度。

 

使用EhcacheRedis实现一级缓存和二级缓存的时候,有两种方案:

第一种:一级缓存使用Redis、二级缓存使用Ehcache,可以当Redis挂了后,保证有备用的本地缓存(本地JVM),但这种方案并不是很好;

第二种:一级缓存使用Ehcache、二级缓存使用Redis,缓存先走本地,如果本地没有在通过建立连接通过网络请求查询二级缓存Redis,这样查询效率会比较高。

那么缓存的过期时间如何控制呢?

通常一级缓存的过期时间都会比二级缓存的过期时间要短(因为代码运行也需要时间,所以两个超时时间也不要相同)。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Redis:哨兵机制与事务及缓存策略【Season2:其四】》的版权归原作者「漫步君」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报