Linux编译安装最新半Redis
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux编译安装最新半Redis相关的知识,希望对你有一定的参考价值。
Redis
Redis is an open source (BSD licensed), in-memory data structure store,used as a database.
- 非关系型键值对数据库
- 官网: www.redis.io
Redis 特性
- 速度快: 10W QPS,基于内存,C语言实现
- 单线程(Redis 6以前早期版本)
- 持久化
- 支持多种数据结构
- 支持多种编程语言
- 功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
- 简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
- 自带主从复制
- 自带集群功能,支持高可用和分布式
YUM安装Redis
- yum安装的Redis版本比较老旧
yum -y install redis
systemctl enable --now redis
源码编译安装Redis
下载源码包
- 官网下载Redis最新release版本源码包
wget http://download.redis.io/releases/redis-6.2.4.tar.gz
解压缩
- 将下载的压缩包解压到指定目录
tar xf redis-6.2.4.tar.gz -d /usr/local/src
安装依赖包
yum -y install gcc make jemalloc-devel
创建安装目录
mkdir -p ${INSTALL_DIR}/{etc,log,data,run}
新建redis系统用户
useradd -r -s /sbin/nologin redis
编译安装
- 进入源码目录,指定安装路径并安装
cd ${SRC_DIR}
make -j ${CPUS} PREFIX=${INSTALL_DIR} install
拷贝配置文件
- 在源码目录中已经准备好了配置文件
- 将配置文件拷贝至安装目录
cp redis.conf ${INSTALL_DIR}/etc/
- 按需修改配置文件中内容
sed -i -e 's/bind 127.0.0.1.*/bind 0.0.0.0/' \\ ## 设定监听本机所有端口
-e "/# requirepass/a requirepass ${PASSWORD}" \\ ## 设定验证密码
-e "/^dir .*/c dir ${INSTALL_DIR}/data/" \\ ## 设定数据存放目录
-e "/logfile .*/c logfile ${INSTALL_DIR}/log/redis-6379.log" \\ ## 设定日志文件
-e "/^pidfile .*/c pidfile ${INSTALL_DIR}/run/redis_6379.pid" \\ ## 设定pid文件
${INSTALL_DIR}/etc/redis.conf
修改程序目录属主
- 为程序安装目录更换属主和主组,
- 让redis用户具有程序目录执行权限,方便以redis用户运行程序
chown -R redis.redis ${INSTALL_DIR}
创建主要程序软链接
- 为所有安装程序创建软链接至环境变量中可执行程序的目录中
- 方便程序执行
ln -s ${INSTALL_DIR}/bin/redis-* /usr/bin/
解决三个报错问题
- 修改系统配置文件,解决三个报错问题
- 设置somaxconn大于1000,backlog参数控制的是三次握手的时候server端收到client ack确认号之后的队列值
- 启用overcommit_memory1,允许内核分配所有的物理内存,而不管当前的内存状态如何
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
sysctl -p
- 禁用THP透明大页面,解决THP在Redis中造成延迟和内存使用问题
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enable' >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
- 如果没有 /etc/rc.d/rc.local,则
cat >> /lib/systemd/system/rc-local.service <<EOF
[Install]
WantedBy=multi-user.target
EOF
echo '#!/bin/bash' > /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enable' >> /etc/rc.local
chmod +x /etc/rc.local
创建服务启动脚本
cat > /lib/systemd/system/redis.service <<EOF
[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
[Install]
WantedBy=multi-user.target
EOF
重新加载服务
systemctl daemon-reload
启动服务并设为开机运行
systemctl enable --now redis
登录验证
redis-cli -a ${PASSWORD} INFO Server
查看端口验证
ss -ntlp
查看服务状态
systemctl status redis
以上是关于Linux编译安装最新半Redis的主要内容,如果未能解决你的问题,请参考以下文章