Redis 安装
Redis 安装
1. 包安装 Redis
[root@node1 ~]#apt -y install redis
[root@Ubuntu2204 ~]#redis-cli
127.0.0.1:6379> info
2. 编译安装 Redis
Redis 源码包官方下载链接:
https://download.redis.io/releases/
# 安装依赖包
[root@ubuntu2204 ~]#apt update
[root@ubuntu2204 ~]#apt -y install make gcc libjemalloc-dev libsystemd-dev
# 下载源码
[root@ubuntu2204 ~]#wget https://download.redis.io/releases/redis-7.2.6.tar.gz
[root@ubuntu2204 ~]#tar -xvf redis-7.2.6.tar.gz
[root@ubuntu2204 ~]#cd redis-7.2.6/
# 编译安装
[root@ubuntu2204 redis-7.2.6]#make -j 2 USE_SYSTEMD=yes PREFIX=/apps/redis install
# 配置环境变量
[root@ubuntu2204 redis-7.2.6]#echo 'PATH=/apps/redis/bin:$PATH' > /etc/profile.d/redis.sh
[root@ubuntu2204 redis-7.2.6]#. /etc/profile.d/redis.sh
# 准备相关目录和配置文件 (创建配置文件、日志、数据等目录)
[root@ubuntu2204 redis-7.2.6]#mkdir /apps/redis/{etc,log,data,run}
[root@ubuntu2204 redis-7.2.6]#cp redis.conf /apps/redis/etc/
2.1前台启动redis
redis-server 是 redis 服务器端的主程序
# 前台启动 redis
[root@ubuntu2204 ~]#redis-server /apps/redis/etc/redis.conf
2.2 消除启动时的Warning提示信息(可选)
1.Tcp backlog
是指TCP的第三次握手服务器端收到客户端 ack 确认号之后到服务器用Accept函数处理请求前的队列长度,即全连接队列
# Ubuntu22.04默认值满足要求,不再有此告警
[root@ubuntu2204 ~]#cat /proc/sys/net/core/somaxconn
4096
若有Tcp backlog告警可修改配置
vim /etc/sysctl.conf
net.core.somaxconn = 4096
2.overcommit_memory
内核参数说明:
内核参数overcommit_memory 实现内存分配策略,可选值有三个:0、1、2
0 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则内存申请失败,并把错误返回给应用进程
1 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
2 表示内核允许分配超过所有物理内存和交换空间总和的内存
[root@ubuntu2204 ~]#sysctl vm.overcommit_memory
vm.overcommit_memory = 0
需要修改 vm.overcommit_memory = 1
vim /etc/sysctl.conf
vm.overcommit_memory = 1
sysctl -p
3.transparent hugepage
警告:您在内核中启用了透明大页面(THP,不同于一般4k内存页,而为2M)支持。 这将在Redis中造成延迟和内存使用问题。 要解决此问题,请以root 用户身份运行命令“echo never> /sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到您的/etc/rc.local中,以便在重启后保留设置。禁用THP后,必须重新启动Redis。
# Ubuntu22.04默认值满足要求,不再有此告警
[root@ubuntu2204 ~]#cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
# 重新启动redis 服务不再有前面的Waring信息
[root@ubuntu2204 ~]#redis-server /apps/redis/etc/redis.conf
2.3 创建 Redis 用户和设置数据目录权限
[root@ubuntu2204 ~]#useradd -r -s /sbin/nologin redis
[root@ubuntu2204 ~]#chown -R redis.redis /apps/redis/
2.4 创建 Redis 服务 Service 文件
[root@ubuntu2204 ~]#vim /lib/systemd/system/redis.service
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/apps/redis/bin/redis-server /apps/redis/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT $MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
LimitNOFILE=1000000
[Install]
WantedBy=multi-user.target
# Redis 通过Service方式启动
[root@ubuntu2204 ~]#systemctl daemon-reload
[root@ubuntu2204 ~]#systemctl enable redis
[root@ubuntu2204 ~]#systemctl start redis.service
[root@ubuntu2204 ~]#systemctl status redis.service
# Redis 尝试写入 PID 文件时遇到了权限问题
Failed to write PID file: Permission denied
修改 Redis 配置文件中的 pidfile 路径
[root@ubuntu2204 ~]#vim /apps/redis/etc/redis.conf
pidfile /apps/redis/run/redis_6379.pid
[root@ubuntu2204 ~]#systemctl daemon-reload
[root@ubuntu2204 ~]#systemctl restart redis.service
再次查看已经没有 Failed to write PID file: Permission denied 报错
[root@ubuntu2204 ~]#systemctl status redis.service
# 修改 Redis 配置文件
[root@ubuntu2204 ~]#vim /apps/redis/etc/redis.conf
bind 0.0.0.0
requirepass 123456
dir /apps/redis/data
logfile "/apps/redis/log/redis_6379.log"
dbfilename dump_6379.rdb
[root@ubuntu2204 ~]#systemctl daemon-reload
[root@ubuntu2204 ~]#systemctl restart redis.service
2.5 安装的相关程序介绍
[root@ubuntu2204 ~]#ll /apps/redis/bin/
redis-benchmark* # 性能测试程序
redis-check-aof -> redis-server* # AOF文件检查程序
redis-check-rdb -> redis-server* # RDB文件检查程序
redis-cli* # 客户端程序
redis-sentinel -> redis-server* # 哨兵程序,软连接到服务器端主程序
redis-server* # 服务端主程序
2.6 验证客户端连接 Redis
# 默认为本机无密码连接
[root@ubuntu2204 ~]#redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> info
127.0.0.1:6379> exit
# 远程客户端连接,注意:Redis没有用户的概念
通过IP 端口 密码 连接
redis-cli -h <Redis服务器IP> -p <PORT> -a <PASSWORD> --no-auth-warning
2.7 程序连接 Redis
Redis 支持多种开发语言访问
# Shell 脚本访问 Redis
[root@ubuntu2204 ~]#cat redis_test.sh
#!/bin/bash
NUM=100
PASSWORD=123456
for i in `seq $NUM`;do
redis-cli -h 127.0.0.1 -a "$PASSWORD" --no-auth-warning set key${i} value${i}
echo "key${i} value${i} 写入完成!"
done
echo "$NUM个key写入完成"
[root@ubuntu2204 ~]#redis-cli -a 123456 --no-auth-warning
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=100,expires=0,avg_ttl=0
3. Docker 容器方式部署
# 实现Redis的持久化保存
[root@ubuntu2204 ~]#docker run --name redis -p 6379:6379 -d -v /data/redis:/data redis