Redis 源码安装

文若2年前技术文章716


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


相关文章

ranger对接hbase

ranger对接hbase

前提:本文是基于集群中已经部署了ranger组件和hbase组件的情况下,增加ranger对hbase组件的对接。安装部署1、ranger-hbase插件安装使用ranger2.3版本对接插件。将插件...

K8S中 CNI 插件的解读

K8S中 CNI 插件的解读

一.CNI是什么首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8s 中标准的一个调用网络实现的接口。Kubel...

MongoDB的碎片化问题

一、碎片化问题1.1 为什么会出现碎片化的问题在生产业务中,一般会对集合数据进行频繁的增删改,常见的碎片化原因有:1、记录被remove,但是其空间没有被复用drop命令会直接删除集合的物理文件,空间...

CDH实操--集成 freeipa

CDH实操--集成 freeipa

1 概述环境准备: 1)安装cdh6.2.1 2)安装FreeIPA,server和client(在所有cdh节点)2 集成2.1 krb5.conf修改注释:default_ccache_nam...

alluxio短路读

alluxio短路读

原理当Client和Worker在同一节点时,客户端对本地缓存数据的读写请求可以绕过RPC接口,使本地文件系统可以直接访问Worker所管理的数据,这种情况被称为短路写,速度比较快,如果该节点没有Wo...

CDH实操--CDH集成Trino(三)

CDH实操--CDH集成Trino(三)

1、将parcel包放到对应下载目录将parcel包放到/var/www/html/trino目录下修改httpd配置文件新增parcel文件类型然后通过命令启动httpd服务:systemctl s...

发表评论    

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