Redis 安装

Redis所有版本下载地址:https://download.redis.io/releases/

1. 关闭防火墙和下载依赖

# 查看防火墙状态
systemctl status firewalld.service
# 关闭防火墙
systemctl stop firewalld.service
# 禁止开机启动防火墙
systemctl disable firewalld.service
# 启动防火墙
systemctl start firewalld.service
# 防火墙随系统开启启动
systemctl enable firewalld.service
# 关闭selinux,提高了系统的安全性,但关闭它可以释放系统资源,提高服务器的性能,避免一些程序的兼容性问题等等
[root@r ~]# sed -i.ori 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
sed -i.ori 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
yum update -y
yum -y install gcc automake autoconf libtool make
yum -y install net-tools
yum -y install vim
yum -y install wget

2.规划目录

/data/redis6379/                    # 数据存放目录
/opt/redis-5.0.7/                    # 安装目录
/opt/                                # 下载并解压目录
/opt/redis6379/{conf,logs,pid}       # 配置目录,日志目录,pid目录

3.下载安装

mkdir -p /data/redis6379 
cd /opt
# yum -y install wget
wget https://download.redis.io/releases/redis-5.0.7.tar.gz
tar -zxf redis-5.0.7.tar.gz
cd /opt/redis-5.0.7
make && make install

 

4.安装完成后,Redis可执行程序会自动添加到/usr/local/bin路径,我们就可以在任何地方的terminal中使用Redis相关命令了。

[root@cs opt]# ll /usr/local/bin/redis*
-rwxr-xr-x. 1 root root 4365728 Aug  1 10:58 /usr/local/bin/redis-benchmark
-rwxr-xr-x. 1 root root 8124120 Aug  1 10:58 /usr/local/bin/redis-check-aof
-rwxr-xr-x. 1 root root 8124120 Aug  1 10:58 /usr/local/bin/redis-check-rdb
-rwxr-xr-x. 1 root root 4806800 Aug  1 10:58 /usr/local/bin/redis-cli
lrwxrwxrwx. 1 root root      12 Aug  1 10:58 /usr/local/bin/redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 8124120 Aug  1 10:58 /usr/local/bin/redis-server

调用redis相关命令:

[root@cs opt]# redis-server -v
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=a67ef2d8861912e7

5.编写配置文件

mkdir -p /opt/redis6379/{conf,logs,pid}
cat >/opt/redis6379/conf/redis6379.conf<<EOF
daemonize yes
# 注意,生产中, 千万不要bind 0.0.0.0,不要将Redis暴露到外网环境,防止被人攻击
bind 127.0.0.1 $(ifconfig ens33|awk 'NR==2{print $2}')
port 6379
pidfile /opt/redis6379/pid/redis6379.pid
logfile /opt/redis6379/logs/redis6379.log
EOF

7.启动

redis-server /opt/redis6379/conf/redis6379.conf

ps -ef|grep redis

8.客户端连接

[root@cs opt]# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> quit
[root@cs opt]# 

无密码,直接连接操作

9.关闭

# 结合启动命令测试关闭命令
redis-server /opt/redis6379/conf/redis6379.conf
ps -ef|grep redis

# 方式1
[root@cs opt]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected> quit
[root@cs opt]# 


# 方式2
[root@cs opt]# redis-cli shutdown
[root@cs opt]# 

# 方式3
[root@cs opt]# pkill -9 redis
[root@cs opt]# 

10.可选的配置,配置systemd管理Redis

# 先把之前可能运行的Redis停止
# 创建redis用户和组,以及给相关目录权限
# 创建systemctl管理redis的文件
# 就可以通过systemctl管理redis了

redis-cli shutdown

# -u和-g选项表示同时添加具有特定UID和GID的用户
# -M创建一个没有主目录的用户
# -s表示当前创建的当前用户无法用来登录系统
# chown -R redis:redis表示指定目录以及内部的文件所有用户属组归于redis:redis
# groupdel redis
# cat /etc/group |grep redis
groupadd redis -g 1000
# userdel redis
# cat /etc/passwd |grep redis
useradd redis -u 1000 -g 1000 -M -s /sbin/nologin
chown -R redis:redis /opt/redis*
chown -R redis:redis /data/redis*

cat >/usr/lib/systemd/system/redis.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis6379/conf/redis6379.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload   # 当添加或者修改了某个服务的配置文件,就要执行daemon-reload命令重新加载下
systemctl start redis


# 启动/停止/重启/查看状态/设置redis开机自启
systemctl start/stop/restart/status/enable redis

 

 

优化:

1.客户端最大连接数低:

解决:systemd启动文件添加参数LimitNOFILE

cat >/usr/lib/systemd/system/redis.service<<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/redis-server /opt/redis6379/conf/redis6379.conf --supervised systemd
ExecStop=/usr/local/bin/redis-cli shutdown
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=65536  #修改此参数
[Install]
WantedBy=multi-user.target
EOF

2.overcommit_memory设置

虚拟内存相关,overcommit_memory 表内存分配策略,可选值:0、1、2

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

解决:

# 临时解决
sysctl vm.overcommit_memory=1

# 永久解决 vim /etc/sysctl.conf  追加:
vm.overcommit_memory=1

# 生效配置
sysctl -p

 

3.关闭THP⼤内存⻚

redis建议我们关掉THP,还给出的具体的操作办法,注意必须使用root来操作,否则会失败。

  • Linux kernel 在 2.6.38 的版本中新增了 THP 的特性,支持大内存页(2MB)分配,默认开启。
  • 当开启 THP 时会降低 fork 子进程的速度,但是 fork 操作之后,每个内存页从原来 4KB 变为 2MB,会大幅增加重写期间父进程内存消耗。
  • 同时每次写命令引起的复制内存也单位放大了 512 倍,会拖慢写操作的时间,导致大量写操作慢查询,例如:简单的 incr、set 命令也会出现在慢查询中。
# 临时解决
echo never > /sys/kernel/mm/transparent_hugepage/enabled


# 永久解决 vim /etc/rc.local  追加:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

 

4.TCP连接数调整

意思是配置 /proc/sys/net/core/somaxconn的值是128,但redis.conf中配置的是511,但是linux内核会以无提示的方式将其截断为128。在一个高并发的环境下,128是远远不够的,所以我们要改大一些。

# 永久解决 vim /etc/sysctl.conf  追加:
net.core.somaxconn= 4096

# 生效配置
sysctl -p

 

如果需要密码:

cat >/opt/redis6379/conf/redis6379.conf<<EOF

requirepass XXX

systemctl restart redis

 

posted @ 2024-09-06 11:22  Mike_Jia  阅读(31)  评论(0)    收藏  举报