一、Redis介绍
Redis是一个开源的使用C语言编写,支持网络,可基于内存亦可持久化的日志型、key-value 数据库,并提供多种语言的API。
1、Redis的特性
速度快,持久化,支持多种数据结构,支持多种编程语言,功能丰富,主从复制,高可用及分布式。
2、
Redis的应用场景
Redis是一个开源。内存存储的数据结构服务器,可用作数据库,高速缓存和消息代理。采用单进程单线程模型,并发能力强大。是当前互联网架构中主流的分布式缓存工具。
二、什么是高可用及Redis的实现方法
高可用一般指服务器的冗余,一个服务器挂了,可以自动切换到另外一个服务器上,不影响客户使用。
Reids如何提供高可用:
主从,哨兵,分布式集群。
三、 Redis 主从模式实现高可用
1、主从模式网络拓扑图
![](https://img.haomeiwen.com/i5543739/387b3eb3b4e2e08b.png)
主节点(master)工作,从节点数据备份。
web应用连接到redis主节点进行工作。
主节点将变化的数据同步给从节点。
主节点宕机,开发人员手动将 redis.properties 修改为将要成为主节点的从节点的配置。
手动将其中一台从节点修改为主节点,并重启。
从上面的步骤来看,主从模式在主节点宕机时,需要进行手动修改配置文件,把从节点变成主节点,开发人员需要修改配置文件。
四、哨兵模式实现高可用
1、哨兵模式网络拓扑图
![](https://img.haomeiwen.com/i5543739/1f82525f038dd50b.png)
添加3个sentinel哨兵节点(奇数个),配置好监听的redis。
web应用的 redis.properties 直接连接哨兵的 ip 和端口。
应用向哨兵询问 redis 主节点的 ip 和端口,执行业务操作。
当master主节点挂机后,哨兵自动把从节点切换为主节点,无需人工干预。
从上面的步骤可以看到,哨兵模式不需要修改配置文件,即可实现高可用。
五、Redis哨兵模式实现网站限流
1、业务场景
对于系统或平台而言,被终端攻击是一件不可避免的事情:
短时间多次操作系统;
重复操作导致缓存击穿甚至雪崩。
2、解决方案
(1)在 nginx 层拦截,防止多次提交。
(2)在 nginx 层+lua+redis做拦截,防止多次提交。
(3)在业务层面拦截,防止多次提交。
3、在业务层面拦截的解决方案
使用 Inteceptor 和 Redis。
1、当用户访问时,以ip或username+日期作为键,访问次数作为值,将其加入缓存,并设置过期时间。
2、如果没有达到一段时间内访问次数的阈值,每次访问将键值加1。
3、如果在过期时间内超过访问次数的阈值,直接返回并提示用户。
网友评论