简介
Redis启动后还需要对其进行管理 比如如何安全的关闭数据库 以及如何配置服务的监听地址 访问密码等
下面将详细说明 Redis服务的简单管理 以及配置文件详解
环境
软件名称 | 版本号 | 下载地址 |
---|---|---|
redis | 3.2.0 | 点击下载 |
步骤
启动和停止Redis
启动Redis很简单 可执行程序路径后面跟配置文件路径就可以了 如果在前台运行Redis的话 Ctrl+c就可以很安全的关闭Redis了 那么如果在后台运行呢
/usr/local/redis/bin/redis-server /etc/redis.conf --daemonize yes
通过--daemonize yes或者直接修改配置文件中的daemonize为yes 让Redis默认后台运行
[root@localhost ~]# netstat -anpt
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 3268/redis-server 1
可以看到 Redis已经监听在本机127.0.0.1的6379端口 PID号为3268
关闭Redis也非常简单 因为Redis能很好的处理TREM信号 所以可以直接 kill 3268
同样 使用redis-cli客户端连接工具 向Redis服务发送SHUTDOWN命令也是可以安全关闭的
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 SHUTDOWN
redis的命令不区分大小写 但是建议命令大写
如果服务监听在本机的127.0.0.1:6379 redis-cli可以直接连接 而不用指定主机和端口号
当redis收到结束命令或TERM信号后 会断开所有客户端连接 然后将内存数据序列化到硬盘 最后完成退出
Redis配置文件
Redis的启动监听地址 监听端口 以及配置PID文件路径等 有非常多的启动参数 如果都在启动redis的时候传入 那么将非常麻烦 而通过配置文件的方式 将大大简化这个过程
Redis的配置项还分两种 一种是只能在启动Redis的时候配置的 比如监听端口等 还有一种可以在命令行中动态修改的 比如日志记录级别等 以下是Redis配置文件中常用配置项
include /path/to/other.conf # 包含其他配置文件
监听相关配置项
tcp-backlog 511 # TCP监听最大容纳数量 增大可以解决高并发下客户端连接缓慢问题
unixsocket /tmp/redis.sock # 非默认项 启动unix套接字监听 redis-cli -s /tmp/redis.sock连接
timeout 0 # 客户端多长时间没有操作redis关闭连接 0表示不关闭
tcp-keepalive 0 # tcp 心跳包 防止一个死的对端连接 推荐设置为60秒
一般配置项
daemonize no # Redis默认运行在前台 使用yes可以让Redis默认后台运行
pidfile /var/run/redis.pid # pid文件位置
loglevel notice # 日志记录级别 [debug | verbose | notice | warning]
logfile /tmp/redis.log # 日志文件位置 默认是个空字符串 redis将日志打印到标准输出
syslog-enabled no # 如果想把日志记录到系统日志 就改为yes
databases 16 # redis启动数据库空间个数 默认进入的是id为0空间 select dbID切换
数据库快照配置项
save 900 1 # 保存数据库到磁盘 900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10 # 300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000 # 60 秒内如果至少有 10000 个 key 的值变化,则保存
save "" # 停用自动保存功能 不同的保存规则是可以都生效的
dbfilename dump.rdb # 保存数据的文件位置
stop-writes-on-bgsave-error yes # 后台保存数据出错 redis强制关闭写操作
rdbcompression yes # 是否在保存数据时压缩 可以减少磁盘使用 但是增大CPU负载
rdbchecksum yes # 是否校验rdb文件
dir ./ # dump.rdb就保存在dir目录中
主从复制配置项
slaveof 172.17.0.2 6379 # 作为172.17.0.2的从数据库
masterauth password # 如果主数据库需要认证 密码写这里
slave-serve-stale-data yes # 如果与主失去联系 从是否要继续提供查询服务 数据可能不是最新
slave-read-only yes # 默认从数据库不支持写入操作
repl-ping-slave-period 10 # 默认每10秒 从数据库发送ping命令道主数据库
repl-timeout 60 # 主从复制过期时间 一定要比repl-ping-slave-period大
repl-diskless-sync no # 默认情况下 复制是内存-> 磁盘-> 内存-> slave端 yes后 将直接发到slave
repl-diskless-sync-delay 5 # 收到第一个请求时 等待多个slave一起来请求之间的间隔时间
repl-backlog-size 1mb # 设置主从复制容量大小 slave断线重连 只恢复断开时丢失的数据
repl-backlog-ttl 3600 # 3600秒后 slave没有连接 master将释放backlog 0表示不释放
slave-priority 100 # 集群中用 master挂了 slave提升为master的优先级
min-slaves-to-write 3 # 至少3个slave才允许向master写数据
min-slaves-max-lag 10 # 至少3个slave 并且ping心跳的超时不超过10秒 才允许向master写数据
安全配置项
requirepass passwd # 连接需要密码 redis-cli 需要通过auth命令 或 -a 参数指定密码登陆
rename-command CONFIG "" # 给命令重命名 如果重命名为空字符串 则屏蔽命令
限制相关配置
maxclients 10000 # 最大连接客户端数量 超过的 redis将关闭新连接
maxmemory 1024mb # 数据库最大占用1024mb内存 超过的话 将按照策略移除keys
maxmemory-policy noeviction # 内存超过后默认移除key的策略
maxmemory-samples 5 # 调整算法的速度和精度 默认从五个键中找到一个使用最少的键
以下是支持的策略:
volatile-lru -> 使用 LRU 算法移除包含过期设置的 key
allkeys-lru -> 根据 LRU 算法移除所有的 key
volatile-random -> 随机移除过期的key
allkeys-random -> 随机移除所有的key
volatile-ttl -> 删除最近到期的key
noeviction -> 不让任何 key 过期,只是给写入操作返回一个错误
AOF日志配置项
appendonly no # 默认不启用aof日志
appendfilename redis.aof # aof日志名称 和rdb快照共享dir路径
appendfsync everysec # aof日志同步硬盘数据策略 (fsync)
每次更改数据库内存后 AOF都会将命令记录到AOF文件 但是由于系统缓存机制 数据还并没真正写入硬盘
系统默认30秒写入一次硬盘 如果在这期间 系统异常退出 将导致数据丢失 以下是redis的解决策略:
no -> 不进行主动同步操作
always -> 每次执行写入操作都进行一次同步
everysec -> 每秒执行一次主动同步操作
no-appendfsync-on-rewrite no # 是否在Redis重写aof文件期间调用fsync
auto-aof-rewrite-percentage 100 # aof文件增长超过上次aof文件大小100% 重写aof文件 0 禁用
auto-aof-rewrite-min-size 64mb # 触发aof重写的大小限制 只有aof大小超过64mb 上一条才生效
aof-load-truncated yes # redis在启动时可以加载被截断的AOF文件
Lua脚本配置项
lua-time-limit 5000 # 一个lua脚本最长执行时间 0或负数无限执行 默认5000毫秒
Redis集群配置项
cluster-enabled yes # 启用或禁用集群
cluster-config-file nodes.conf # 保存节点配置文件的路径 节点配置文件无须人为修改
cluster-node-timeout 15000 # 集群节点超时 默认15000毫秒
cluster-slave-validity-factor 10 # master失联多久 slave故障切换 0 表示一直尝试切换
cluster-migration-barrier 1 # 一个master可以拥有的最小slave数量
cluster-require-full-coverage yes # 当一定比例的键空间没有被覆盖到 集群就停止任何查询操作
慢查询日志配置项
slowlog-log-slower-than 10000 # 配置记录慢查询日志的条件 单位是微妙 负值关闭 0记录所有
slowlog-max-len 1024 # 记录慢查询日志最大条数
延时监控配置项
latency-monitor-threshold 0 # redis延迟监控子系统在运行时 会抽样检测可能导致延迟的不同操作
# 系统只记录超过设定值的操作 单位是毫秒 0表示禁用该功能
事件通知配置项
notify-keyspace-events "" # 空字符串表示关闭键空间通知功能 支持以下字符任意组合
K -> 键空间通知 所有通知以 __keyspace@ __ 为前缀
E -> 键事件通知,所有通知以 __keyevent@ __ 为前缀
g -> DEL EXPIRE RENAME 等类型无关的通用命令的通知
$ -> 字符串命令的通知
l -> 列表命令的通知
s -> 集合命令的通知
h -> 哈希命令的通知
z -> 有序集合命令的通知
x -> 过期事件 每当有过期键删除时通知
e -> 键淘汰事件 每当有键因为maxmemory-policy 策略被淘汰时通知
A -> 参数g$lshzxe 的别名
高级配置
hash-max-ziplist-entries 512 # 指定在超过一定的数量或者最大的元素超过某一临界值时
hash-max-ziplist-value 64 # 采用一种特殊的哈希算法
list-max-ziplist-size -2 # 列表 集合 有序集合和哈希的一样
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000 # HyperLogLog稀疏表示限制设置
activerehashing yes # 如果对延迟要求较高 则设为no 禁止重新hash 但可能会浪费很多内存
client-output-buffer-limit normal 0 0 0 # 客户端缓存限制 硬限制 软限制 以及软限制持续秒数
client-output-buffer-limit slave 256mb 64mb 60 # 当满足硬限制 或者 软限制和持续秒数 与客户端断开
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10 # 内部函数执行的后台任务的频率 如清除过期数据 客户端超时链接等 1~500
附录
动态更改Redis配置
连接到redis后 用CONFIG GET * 可以看到所有的配置 用CONFIG SET则可以对配置进行修改 但是 并不是所有的配置都能动态修改
下面的例子 是用CONFIG SET 动态的给数据库添加认证密码
127.0.0.1:6379> CONFIG SET requirepass 123.com
OK
127.0.0.1:6379> set a 100
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123.com
OK
127.0.0.1:6379> set a 100
OK
127.0.0.1:6379>
可以看到 通过CONFIG GET已经可以看到刚才设置的密码
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "123.com"
127.0.0.1:6379>
由于已经配置了密码 下次登陆的时候 也可以直接用 -a 参数提供认证密码
/usr/local/redis/bin/redis-cli -a 123.com