# 1.下载软件包
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
# 2.解压安装包
tar -zxvf redis-6.2.6.tar.gz -C /usr/local/src
# 3.安装编译环境
yum install -y gcc gcc-c++
# 4.编译安装
cd /usr/local/src/redis-6.2.6/
make PREFIX=/usr/local/redis install
# 5.拷贝配置文件
mkdir /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc/redis.conf
# 6.添加软连接
ln -s /usr/local/redis/bin/* /usr/local/bin/
/usr/local/redis/bin 目录下文件详解:
|------------------|----------------------------------------|
| redis-benchmark | redis 性能测试工具,测试 Redis 在你的系统及你的配置下的读写性能 |
| redis-check-aof | 检查 aof 日志的工具 |
| redis-check-dump | 检查 rdb 日志的工具 |
| redis-cli | 连接用的客户端 |
| redis-server | redis 服务进程 |
a. 解决报警信息
① 修改用户打开的最大文件数
# 临时修改
ulimit -n 102400
ulimit -n # 102400
# 永久修改
vim /etc/security/limits.conf
* soft nofile 102400
* hard nofile 102400
② 修改内核参数
echo -e "net.core.somaxconn = 511\nvm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
③ 重新启动服务:redis-server /usr/local/redis/etc/redis.conf
b. 后台运行redis
默认情况,Redis 不是在后台运行,我们需要把 redis 放在后台运行
① 修改配置文件:vim /usr/local/redis/etc/redis.conf
#修改 no 为 yes
daemonize yes
#默认监控 127.0.0.1 添加本机 IP 192.168.1.11
bind 127.0.0.1 -::1 192.168.137.253
# 指定日志文件
logfile "/var/log/redis/redis_6379.log"
② 创建日志目录:mkdir /var/log/redis
③ 启动服务
redis-server /usr/local/redis/etc/redis.conf
netstat -antup | grep redis
④ 测试redis
redis-cli
127.0.0.1:6379> ping
PONG
c. 停止redis服务
# 方式一
redis-cli shutdown
# 方式二
pkill redis-server
d. redis 开机自启
chmod +x /etc/rc.d/rc.local
echo " /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf"
>> /etc/rc.d/rc.local
e. redis 数据存储
redis 的存储分为内存存储、磁盘存储和 log 文件三部分,配置文件中有三个参数对其进行配置。
save seconds updates:save
:指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。appendonly yes/no :appendonly
:指出是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis 本身同步数据文件是按上面的 save 条件来同步的,所以有的数据会在一段时间内只存在于内存中。appendfsync no/always/everysec :appendfsync
配置,no 表示等操作系统进行数据缓存同步到磁盘,always 表示每次更新操作后调用 fsync()将数据写到磁盘,everysec表示每秒同步一次。
f. redis 认证设置
① 修改redis.conf 配置文件
# 启用此项,并指定密码即可
# requirepass foobared
requirepass 123456
② 重启服务
# 重启redis
redis-cli shutdown
redis-server /usr/local/redis/etc/redis.conf
③ 测试
# 连接redis 客户端
redis-cli
# 直接查询,报错
127.0.0.1:6379> select 1
(error) NOAUTH Authentication required.
# 输入密码
127.0.0.1:6379> auth 123456
# 再次查询成功
127.0.0.1:6379> select 1
④ 登陆的时候使用密码:redis-cli -a 123456
g. redis 配置文件
#是否作为守护进程运行
daemonize yes
#如以后台进程运行,则需指定一个 pid,默认为/var/run/redis.pid
pidfile redis.pid
#绑定主机 IP,默认值为 127.0.0.1
#bind 127.0.0.1
#Redis 默认监听端口
port 6379
#客户端闲置多少秒后,断开连接,默认为 300(秒)
timeout 300
#日志记录等级,有 4 个可选值,debug,verbose(默认值),notice,warning
loglevel verbose
#指定日志输出的文件名,默认值为 stdout,也可设为/dev/null 屏蔽日志
logfile stdout
#可用数据库数,默认值为 16,默认数据库为 0
databases 16
#保存数据到 disk 的策略
#当至少有一条 Key 数据被改变时,900 秒刷新到 disk 一次
save 900 1
#当至少有 10 条 Keys 数据被改变时,300 秒刷新到 disk 一次
save 300 10
#当至少有 1w 条 keys 数据被改变时,60 秒刷新到 disk 一次
save 60 10000
#当 dump.rdb 数据库的时候是否压缩数据对象
rdbcompression yes
#存储和加载 rdb 文件时校验
rdbchecksum yes
#本地数据库文件名,默认值为 dump.rdb
dbfilename dump.rdb
#后台存储错误停止写。
stop-writes-on-bgsave-error yes
#本地数据库存放路径,默认值为 ./
dir /var/lib/redis/
########### Replication #####################
#Redis 的复制配置
# replicaof <masterip> <masterport> 当本机为从服务时,设置主服务的 IP 及端口
# masterauth <master-password> 当本机为从服务时,设置主服务的连接密码
#连接密码
# requirepass foobared
#最大客户端连接数,默认不限制
# maxclients 128
#最大内存使用设置,达到最大内存设置后,Redis 会先尝试清除已到期或即将到期的 Key,
#当此方法处理后,一旦到达最大内存设置,将无法再进行写入操作。
# maxmemory <bytes>
#是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时
#间内的数据丢失。因为 redis 本身同步数据文件是按上面 save 条件来同步的,所以
#有的数据会在一段时间内只存在于内存中。默认值为 no
appendonly no
#更新日志文件名,默认值为 appendonly.aof
#appendfilename
#更新日志条件,共有 3 个可选值。no 表示等操作系统进行数据缓存同步到磁盘,
#always 表示每次更新操作后调用 fsync()将数据写到磁盘,everysec 表示每秒同步一
#次(默认值)。
# appendfsync always
appendfsync everysec
# appendfsync no
#当 slave 失去与 master 的连接,或正在拷贝中,如果为 yes,slave 会响应客户端
#的请求,数据可能不同步甚至没有数据,如果为 no,slave 会返回错误"SYNC with
#master in progress"
replica -serve-stale-data yes
#如果为 yes,slave 实例只读,如果为 no,slave 实例可读可写。
replica -read-only yes
# 在 slave 和 master 同步后(发送 psync/sync),后续的同步是否设置成
#TCP_NODELAY . 假如设置成 yes,则 redis 会合并小的 TCP 包从而节省带宽,但会增
#加同步延迟(40ms),造成 master 与 slave 数据不一致 假如设置成 no,则 redis
#master 会立即发送同步数据,没有延迟
repl-disable-tcp-nodelay no
#如果 master 不能再正常工作,那么会在多个 slave 中,选择优先值最小的一个
#slave 提升为 master,优先值为 0 表示不能提升为 master。
replica-priority 100
#### LIMITS ####
#客户端并发连接数的上限是 10000,到达上限,服务器会关
#闭所有新连接并返回错误"max number of clients reached"
maxclients 10000
#设置最大内存,到达上限,服务器会根据驱逐政策(eviction
#policy)删除某些键值,如果政策被设置为 noeviction,那么 redis 只读,对于增加内
#存的操作请求返回错误。
maxmemory 15G
#### LUA SCRIPTING ####
#一个 Lua 脚本最长的执行时间为 5000 毫秒(5 秒),如果
#为 0 或负数表示无限执行时间。
lua-time-limit 5000
#### SLOW LOG ####
#当某个请求执行时间(不包括 IO 时间)超过
#10000 微妙(10 毫秒),把请求记录在慢日志中 ,如果为负数不使用慢日志,如果
#为 0 强制记录每个指令。
slowlog-log-slower-than 10000
#慢日志的最大长度是 128,当慢日志超过 128 时,最先
#进入队列的记录会被踢出来,慢日志会消耗内存,你可以使用 SLOWLOG RESET 清
#空队列回收这些内存。
slowlog-max-len 128
#### ADVANCED CONFIG ####
#较小的 hash 可以通过某种特殊的方式进行编码,以
#节省大量的内存空间,我们指定最大的条目数为 512,每个条目的最大长度为 64。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64 #同上。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64 #同上。
#重新哈希 the main Redis hash table
#(the one mapping toplevel keys to values),这样会节省更多的空间。
activerehashing yes
#对客户端输出缓冲进行限制可以强迫那
#些就不从服务器读取数据的客户端断开连接。对于 normal client,第一个 0 表示取
#消 hard limit,第二个 0 和第三个 0 表示取消 soft limit,normal client 默认取消限
#制,因为如果没有寻问,他们是不会接收数据的。
client-output-buffer-limit normal 0 0 0
#对于 slave client 和 MONITER
#client,如果 client-output-buffer 一旦超过 256mb,又或者超过 64mb 持续 60 秒,
#那么服务器就会立即断开客户端连接。
client-output-buffer-limit slave 256mb 64mb 60
#对于 pubsub client,如果 clientoutput-buffer 一旦超过 32mb,
#又或者超过 8mb 持续 60 秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60
#### INCLUDES ####
#包含一些可以重用的配置文件。
#hz 10 #Redis 调用内部函数来执行后台 task,比如关闭已经 timeout 连接,删除
#过期的 keys 并且永远不会被访问到的,执行频率根据 hz 后面的值来确定。在 Redis
#比较空闲的时候,提高这个值,能充分利用 CPU,让 Redis 相应速度更快,可取范
#围是 1-500 ,建议值为 1--100
include /path/to/conf
# 当子进程重写 AOF 文件,以下选项开启时,
# AOF 文件会每产生 32M 数据同步一次。这有助于更快写入文件到磁盘避免延迟
aof-rewrite-incremental-fsync yes
################ VIRTUAL MEMORY ###########
#是否开启 VM 功能,默认值为 no
vm-enabled no
# vm-enabled yes
#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个 Redis 实例共享
vm-swap-file /tmp/redis.swap
#将所有大于 vm-max-memory 的数据存入虚拟内存,无论 vm-max-memory 设置多
#小,所有索引数据都是内存存储的 (Redis 的索引数据就是 keys),也就是说,
#当 vmmax-memory 设置为 0 的时候,其实是所有 value 都存在于磁盘。默认值为 0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
①②③④⑤⑥⑦⑧⑨⑩