redis的哨兵模式和集群模式如何解决卡顿问题

项目场景:

redis是一个很好的缓存中间件,当我们的请求很多的时候,频繁读取数据库肯定是不可取的。而当数据请求太大,对redis的操作压力也会加大。当单机redis的cpu占用率超过了50%以上,我这边是到了100%的时候,优化redis就势在必行了。


redis哨兵模式

首先我们想到的是将redis进行读写分离,那么采用哨兵模式是最好的方式

安装redis6.2.6

sudo tar -xvf redis-6.2.6.tar.gz -C /usr/local/redis && cd /usr/local/redis/redis-6.2.6 && sudo make
sudo cp /usr/local/redis/redis-6.2.6/src/redis-server /usr/local/bin/
sudo cp /usr/local/redis/redis-6.2.6/src/redis-cli /usr/local/bin/
sudo cp /usr/local/redis/redis-6.2.6/src/redis-sentinel /usr/local/bin/

配置redis.conf和sentinel.conf

先在根目录下创建一个myredis的文件夹

sudo mkdir myredis
sudo chmod 777 myredis

然后在myredis文件夹下面创建6个配置文件,可以直接到这里下载:redis哨兵模式配置文件
在这里插入图片描述

做个启动脚本

#!/bin/sh
#start redis master-slave
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf
 
redis-sentinel /myredis/sentinel26379.conf
redis-sentinel /myredis/sentinel26380.conf
redis-sentinel /myredis/sentinel26381.conf

最后使用sudo start start-redis-sentinel.sh 启动即可


redis集群模式

使用redis哨兵模式后,我发现6379对应的redis进程,就是主进程的cpu占用率还是居高不下,另外两个进程cpu占用率不高,由此我怀疑还是代码里面写的操作压力太大。于是考虑redis集群模式。

配置redis.conf

先在根目录下创建一个myredis的文件夹

sudo mkdir myrediscluster
sudo chmod 777 myrediscluster

然后在myrediscluster文件夹下面创建6个配置文件,可以直接到这里下载:redis集群模式配置文件
在这里插入图片描述

启动脚本

#!/bin/sh
#start redis cluster
redis-server /myrediscluster/redis6001.conf
redis-server /myrediscluster/redis6002.conf
redis-server /myrediscluster/redis6003.conf
redis-server /myrediscluster/redis6004.conf
redis-server /myrediscluster/redis6005.conf
redis-server /myrediscluster/redis6006.conf
sleep 10s

redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006

最后使用sudo start start-redis-cluster.sh 启动即可


结论:

集群搭建完毕后,确实3个主redis的cpu占用率得到了平分后有一定程度的下降。优化基本结束了。 当然redis写的压力太大,最后我还是去优化了代码,集群虽然能解决问题,但还是更多的要去代码层面分析问题。尽量不要在太高的并发逻辑里面做写的操作


以下是一些参考文档

redis群集模式有哪几种?

redis安装教程和redis集群搭建–主从复制(读写分离)、中间人模式(主仆兼具、去中心化)、反客为主、哨兵模式,从实战出发的保姆级别教程

Redis(1):四种模式(单机、哨兵、集群、主从复制)原理

laravel redis sentinel 和 redis cluster 配置

Redis Sentinel部署及在Laravel中使用

Redis connection [cache] not configured.

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 11:12:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 11:12:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 11:12:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 11:12:02       18 阅读

热门阅读

  1. Https图片链接下载问题

    2023-12-20 11:12:02       45 阅读
  2. Https接口调用问题

    2023-12-20 11:12:02       37 阅读
  3. (c语言)关机程序

    2023-12-20 11:12:02       39 阅读
  4. ubuntu 22.04 安装 lfs

    2023-12-20 11:12:02       38 阅读
  5. 数据结构 模拟实现ArrayList顺序表

    2023-12-20 11:12:02       36 阅读
  6. sqlite3使用中的问题

    2023-12-20 11:12:02       47 阅读