windows环境下搭建Redis集群(方式一:主从复制Replication)以及redis常见问题描述(缓存穿透、缓存雪崩、缓存击穿)

一、Redis缓存相关问题

1.1 缓存穿透
缓存穿透是指查询一个数据库一定不存在的数据。
我们以前正常的使用Redis缓存的流程大致是:
1、数据查询首先进行缓存查询
2、如果数据存在则直接返回缓存数据
3、如果数据不存在,就对数据库进行查询,并把查询到的数据放进缓存
4、如果数据库查询数据为空,则不放进缓存

例如我们的数据表中主键是自增产生的,所有的主键值都大于0。此时如果用户传入的参数为-1,会是怎么样?这个-1,就是一定不存在的对象。程序就会每次都去查询数据库,而每次查询都是空,每次又都不会进行缓存。假如有人恶意攻击,就可以利用这个漏洞,对数据库造成压力,甚至压垮我们的数据库。

为了防止有人利用这个漏洞恶意攻击我们的数据库,我们可以采取如下措施:
如果从数据库查询的对象为空,也放入缓存,key为用户提交过来的主键值,value为null,只是设定的缓存过期时间较短,比如设置为60秒。这样下次用户再根据这个key查询redis缓存就可以查询到值了(当然值为null),从而保护我们的数据库免遭攻击。

1.2 缓存雪崩
缓存雪崩,是指在某一个时间段,缓存集中过期失效。在缓存集中失效的这个时间段对数据的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。
为了避免缓存雪崩的发生,我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数据可以缓存的时间段一些。甚至对于一些特别热门的数据可以设置永不过期。

1.3 缓存击穿
缓存击穿,是指一个key非常热点(例如双十一期间进行抢购的商品数据),在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求到数据库上,就像在一个屏障上凿开了一个洞。
我们同样可以将这些热点数据设置永不过期就可以解决缓存击穿的问题了。

二、Redis集群之主从复制
redis支持主从复制的模式。
在主从复制模式下Redis节点分为两种角色:主节点(也称为master)和从节点(也称为slave)。这种模式集群是由一个主节点和多个从节点构成。典型的读写分离原则
原则:Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接master来同步数据。
1
这是一个典型的分布式读写分离模型。我们可以利用master来处理写操作slave提供读操作。这样可以有效减少单个机器的并发访问数量。
要实现主从复制这种模式非常简单,主节点不用做任何修改,直接启动服务即可。从节点需要修改redis.conf配置文件,加入配置:slaveof <主节点ip地址> <主节点端口号>,例如master的ip地址为192.168.200.129,端口号为6379,那么slave只需要在redis.conf文件中配置slaveof 192.168.200.129 6379即可。
分别连接主节点和从节点,测试发现主节点的写操作,从节点立刻就能看到相同的数据。但是在从节点进行写操作,提示 READONLY You can't write against a read only slave 不能写数据到从节点。
现在我们就可以通过这种方式配置多个从节点进行读操作,主节点进行写操作,实现读写分离。

三、搭建步骤(windows版)
**步骤1:**先复制两份redis,为了便于区分,博主改名为如下所示。其中,master代表主节点,两个slave代表从节点
在这里插入图片描述
步骤2:依次修改从节点配置文件,注意,如果有两个 conf 文件,都需修改。主节点配置文件不用修改

port 6380
slaveof 127.0.0.1 6379

在这里插入图片描述
在这里插入图片描述
**步骤3:**修改完毕后,启动 redis
3.1 在redis安装目录下打开cmd
在这里插入图片描述
3.2 输入以下命令启动

redis-server redis.windows-port.conf

在这里插入图片描述
3.3 启动完毕,进行测试
在 主节点 安装目录下 打开 redis,连接

redis-cli 6379

在这里插入图片描述
进行读写操作,如图
在这里插入图片描述
3.4 打开从节点
在这里插入图片描述
进行操作
在这里插入图片描述
可以发现 从节点并不能进行 写入操作,只能进行“读”操作

总结

接下来会陆续更新redis其它两种集群方式~

猜你喜欢

转载自blog.csdn.net/manqishizhizhu/article/details/120872801