掌握Redis:实用技巧大揭秘

发表时间: 2024-02-13 21:32

一:Redis Sentinel(Redis集群监控管理软件)

集群最小单位为:1个Sentinel、2个redis;

检查主机的 REDIS 角色

redis-cli -h 192.168.146.144 -p 6379 info Replication

1.启动并配置好主从redis

2.配置 Redis Sentinel

sentinel.conf

port 26379

sentinel monitor mymaster 192.168.146.144 6379 1 #修改IP地址,IP可以是集群中的任意一个IP地址

sentinel down-after-milliseconds mymaster 5000 #默认1s检测一次,这里配置超时5秒为宕机

sentinel failover-timeout mymaster 60000 #60秒 超时

sentinel can-failover mymaster yes #允许宕机

sentinel parallel-syncs mymaster 1 #通知slave机器数量

3.启动 Redis Sentinel

/usr/local/bin/redis-server /usr/local/redis/sentinel.conf --sentinel &

4.检查sentinel 状态

redis-cli -h 192.168.146.144 -p 26379 info Sentinel

5.检查slave 的 sentinel 状态

redis-cli -h 192.168.146.144 -p 26379 sentinel slaves mymaster

从库(name数量),从库的IP地址和状态,主库的IP地址和状态。

#还有‘runid’ ,redis的从接管主没有优先级的参数可以配置,默认使用runid的大小来竞争主库,所以这里也可以预测下一个主是哪台

故障模拟

1.关闭主redis

# 如果不是主宕机,而是从宕机,那么不会发生切换行为,只会把宕机的那台从集群中剔除。

# 已宕机的机器,如果再次加入集群,只要它成为了当前主的从机,则Sentinel会自动发现,并将其加入集群成员

对程序而言,存在IP变动的情况


二:redis 优化

/proc/sys/net/core/somaxconn


/proc/sys/net/core/somaxconn 对应 net.core.somaxconn

通过listen系统调用可以指定的最大accept队列backlog,当排队的请求连接大于该值时,后续进来的请求连接会被丢弃。

/proc/sys/net/core/somaxconn

定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。

128

2048

net.core.somaxconn = 2048

timeout 300

tcp-keepalive 60


三:gcc 升级

gcc 升级

升级版本

yum -y install centos-release-scl

yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils

scl enable devtoolset-9 bash

以上是临时启用, 要想长期使用gcc 9.1

echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile

编译安装

cd /root

wget https://download.redis.io/releases/redis-6.0.9.tar.gz

$ tar xzf redis-6.0.9.tar.gz

$ cd redis-6.0.9

make make PREFIX=/usr/local/redis install

添加环境变量:

Vim /etc/profile

export PATH=$PATH:/usr/local/redis/bin

配置生效:

Source/etc/profile

创建目录

mkdir -p /data/redis/{etc,data,log}

cp /root/redis-6.0.9/redis.conf .

修改配置项

Bind 绑定的IP地址,默认是只能本地访问

Pidfile

Dump

dir数据存储路径

Log 指定日志

Daemonize 修改运行模式

启动服务:

Redis-server /data/redis/etc/redis.conf

启动服务:

设置密码:

Vim /usr/local/redis/etc/redis.conf

Requirepass 123456

服务化

添加redis服务文件:

Vim /lib/systemd/system/redis.service

[Unit]

Description=redis

After=network.target

[Service]

Type=forking

PIDFile=/var/run/redis_6379.pid

ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

配置生效:

Systemctl daemon-reload

加入开机启动:

Systemctl enable redis.service

启动服务:

Systemctl start redis

停止服务:

Systemctl stop redis

查看服务状态:

Systemctl status redis

基准测试

redis-benchmark -h localhost -p 6379 -c 100 -n 10000

-c: 指定客户端的数量

-n: 请求数量

客户端操作

1)连接服务

Redis-cli -h 127.0.0.1 -p 6379 -a 密码

2)关闭服务

Redis-cli shutdown

常见问题:

  1. 在文件/etc/profile文件添加全局变量之后 ,在root用户下无法使用

  解决:添加变量到/root/.bashrc

复制代码

vim /root/.bashrc

export PATH=$PATH:/usr/local/redis/bin

或者添加软连接

ln -s export /usr/local/redis/bin/redis-server /usr/bin/redis-server