Redis 源码安装

文若2年前技术文章598


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


相关文章

PG的锁(二)

四、死锁PostgreSQL自动检测死锁情况并会自动回滚其中一个事务进行处理,从而其他事务完成。db1=# select * from t1 where id in (1,2,3);  id | i...

Hbase Rowkey设计方法

良好的 rowkey 设计,应当遵循以上四大原则,并且能让数据分散,从而避免热点问题。下面是几种常用的 rowkey 设计方法。1 Salt 加盐这里说的 Salt 加盐方法,是给每一个 rowkey...

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(2)

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构(2)

        3.0 在云服务器进行环境配置        将项目放到云服务器上运行,那么离不开项目所依赖的环境,比如...

MySQL性能优化(二)优化排序操作

MySQL性能优化(二)优化排序操作

排序是数据库的基本功能。一个例子SELECT * FROM audit_log  WHERE user_id = xxx AND&nb...

PG的analyze与vacuum

analyze-统计信息用于收集表的统计信息,只会对表加读锁,不影响表上其它SQL并发执行,对于大表只会读取表中部分数据 vacuum-碎片回收标记旧版本行的信息为可用,以重复使用这部分空间 更新统计...

LINUX 安全运维-文件安全

LINUX 安全运维-文件安全

文件的ACL针对文件以及文件夹我们在新建的时候,通常会有一个默认的权限:[rootobogontmplmkdirtest[rootcbogontmp]touchtestxt[rootcbogontmp...

发表评论    

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