Redis 源码安装

文若2年前技术文章653


1. 下载安装包

Linux 中常用两种安装方法,第一种是通过操作系统软件管理软件来安装,例如 CentOS 中的 yum Ubuntu 中的 apt。由于 Redis 更新比较快,而这些软件也不一定更新到最新版本,且源码安装难度不大,所以我们一般比较推荐使用源码安装。

Redis 借鉴了 Linux 操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如 2.7、2.9、3.1)如果是偶数,则为稳定版本(例如 2.6、2.8、3.0)通常我们生产环境都会选择 “偶数” 版本。

2. 安装步骤

  1. 解压 Redis 源码安装包;

tar -zxvf redis-5.0.0.tar.gz
  1. 创建软链接(方便后面升级使用)

ln -s redis-5.0.0 redis
  1. 进入 Redis 目录

cd redis
  1. 编译(编译前确认操作系统已经安装 gcc)如果没有安装 gcc 会报错,重新编译前需要运行 make distclean

make
  1. 安装

make install
  1. 查询版本

# redis-cli --version
redis-cli 5.0.0

安装完成后会有默认的可执行文件:

  • redis-benchmark:Redis 基准测试工具

  • redis-check-aof:Redis AOF 持久化检测及修复工具

  • redis-check-rdb:Redis RDB 持久化检测及修复工具

  • redis-cli:Redis 命令行客户端

  • redis-sentinel:Redis 哨兵

  • redis-server:Redis 启动

3. 配置

3.1 白名单配置

Redis 默认 bind 127.0.0.1需要根据业务需求修改。

截屏2022-08-09 下午3.12.58.png

3.2 密码配置

如果是初始化阶段的 Redis 直接在配置文件中修改 requirepass配置即可:

# If the master is password protected (using the "requirepass" configuration
# requirepass foobared

如果服务已经启动起来了,想要配置密码,可以使用下方命令,不需要重启:

-- 设置密码
config set requirepass YouPassword
-- 将修改的配置持久化
config rewrite

3.3 初始化配置

Redis 的目录下都会有默认的配置文件,可以在默认的基础上进行修改,通常初始化我们都会关注这两个参数:

maxmemory:允许 Redis 使用的最大内存,如果为 0 则表示不限制。

maxmemory-policy:当内存超出限制,使用哪种数据淘汰策略。

  • VolatileLRU:按照 LRU 算法逐出原有数据,但仅逐出设置了过期时间的数据;

  • AllKeysLRU:按照 LRU 算法逐出原有数据;

  • AllKeysRandom:随机逐出原有数据;

  • VolatileLFU:只从设置失效(expire set)的 key 中选择最不常用的 key 进行删除;

  • VolatileTTL:仅逐出设置了过期时间的数据,并且是按照 TTL 有小到大的顺序进行逐出;

  • VolatileRandom:随机逐出原有数据,但仅逐出设置了过期时间的数据;

  • AllkeysLFU:优先删除掉最不常用的 key;

  • NoEviction:不逐出任何数据,新数据的写入会得到一个错误信息。

一般都会按照 Reids 使用场景来设置,如果是 cache 场景,数据是可以再重新刷出来,我们会选择对应的 LRU 数据淘汰策略,避免内存溢出。如果是 store 场景,数据不能丢失,则会设置为 noeviction 如果超出限制,后面的写入操作会报错,读请求正常响应。

3.4 启动配置

配置启动时,我们经常会用到下面的参数:

  • port:端口,默认 6379

  • logfile:日志

  • dir:Redis 工作目录,存放 RDB 等文件

  • daemonize:是否以守护进程方式启动

redis-server /usr/local/redis/redis.conf --port 6379 --logfile /usr/local/redis/redis.log --daemonize yes

4. 关闭 Redis

使用 redis-cli 命令可以关闭,关闭时会断开所有链接,然后生成持久化文件。

redis-cli shutdown

关闭时我们可以在日志中看到如下内容:

* DB loaded from disk: 0.000 seconds
* Ready to accept connections
# User requested shutdown...
* Saving the final RDB snapshot before exiting.
* DB saved on disk
* Removing the pid file.
# Redis is now ready to exit, bye bye...

如果使用 kill 进程号的方式关闭,则不会生成持久化文件,极端情况可能会出现 AOF 和复制丢失数据情况。

5. 开机自启

Redis 安装目录下的 utils文件夹中有 Redis 自带的启动脚本:redis_init_script

#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO

# Redis 端口
REDISPORT=6379
# Redis 服务器路径
EXEC=/usr/local/bin/redis-server
# Redis 客户端路径
CLIEXEC=/usr/local/bin/redis-cli
# PID 文件路径
PIDFILE=/var/run/redis_${REDISPORT}.pid
# 配置文件路径,需要修改
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

通常只需要修改参数路径即可,然后 cp 到 init.d 目录下:

cp redis_init_script /etc/init.d/redisd

配置开机自启:

chkconfig redisd on


相关文章

Presto开发语句简介

Presto开发语句简介

根据presto中的结构配置,catalog表示连接,主要看presto中catalog文件夹下的配置,一般包含hive、mysql等,其中可以根据业务的不同设置多个配置文件。schema表示连接中的...

Centos7 升级内核

1、查看当前内核版本$ uname -rsLinux 3.10.0-1160.45.1.el7.x86_642、安装 ELRepo# 载入公钥$ rpm --import https://www.el...

Doris性能测试

Doris性能测试

1.性能测试(1)环境信息硬件环境 软件环境l Doris 部署 3BE 3FE;l 内核版本:Linux version 5.5.0-96-genericl 操作系统版本:CentOS Linux...

HDFS Fsimage分析磁盘目录(文件级别)

HDFS Fsimage分析磁盘目录(文件级别)

首先获取fsimage信息hdfs dfsadmin -fetchImage  /opt/fsimage格式化fsimage 转换为可读文本hdfs oiv -i /opt/fsimage/fsima...

MySQL 中的状态变量

前言本篇文章介绍一些 MySQL 中常用的监控指标,常见的监控工具都是采集 MySQL 中的状态变量(status variables)理解这些状态变量,可以更好的帮助我们理解 MySQL 监控的含义...

磁盘分盘脚本分享

磁盘分区脚本名称:mg_fdisk.sh#!/bin/bashif [ "$#" -ne 1 ]; then  echo "请传入磁盘参数"  exit 1fidisk=$1# 检查磁盘是否存在if...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。