Redis 源码安装
1. 下载安装包
Linux 中常用两种安装方法,第一种是通过操作系统软件管理软件来安装,例如 CentOS 中的 yum Ubuntu 中的 apt。由于 Redis 更新比较快,而这些软件也不一定更新到最新版本,且源码安装难度不大,所以我们一般比较推荐使用源码安装。
Redis 借鉴了 Linux 操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如 2.7、2.9、3.1)如果是偶数,则为稳定版本(例如 2.6、2.8、3.0)通常我们生产环境都会选择 “偶数” 版本。
2. 安装步骤
解压 Redis 源码安装包;
tar -zxvf redis-5.0.0.tar.gz
创建软链接(方便后面升级使用)
ln -s redis-5.0.0 redis
进入 Redis 目录
cd redis
编译(编译前确认操作系统已经安装 gcc)如果没有安装 gcc 会报错,重新编译前需要运行 make distclean
make
安装
make install
查询版本
# 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
需要根据业务需求修改。
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