Redis服务配置文件位于Redis安装目录下名为redis.conf
,可使用config
命令获取get
或设置set
配置项。
获取Redis服务配置值,*
表示获取Redis所有配置项。
$ redis-cli
redis 127.0.0.1:6379> config get *
修改Redis服务配置项
$ redis-cli
redis 127.0.0.1:6379> config set loglevel "notice"
Redis服务配置被划分为9大块
- 通用
- 快照
- 复制
- 安全
- 限制
- 追加模式
- Lua脚本
- 慢日志
- 事件通知
通用 GENERAL
daemonize
Redis服务是否以守护进程的方式运行,默认为no
,使用yes
开启。默认情况下 Redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。开启后Redis会生成一个pid
文件,默认会将pid
写入/var/run/redis.pid
文件,可通过pidfile
配置项指定路径。
redis 127.0.0.1:6379> config get daemonize
1) "daemonize"
2) "no"
pidfile
Redis服务以守护进程运行时pid
文件保存路径,Redis 默认会把 pid
文件放在/var/run/redis.pid
。
redis 127.0.0.1:6379> config get pidfile
1) "pidfile"
2) "/var/run/redis.pid"
port
Redis默认服务端口是6379,若设置为0的话,redis 将不在 socket 上监听任何客户端连接。如果Redis不监听端口那还怎么与外界通信呢?其实Redis支持通过UNIX socket
方式来接收请求,可通过unixsocket
配置项来指定UNIX socket文件的路径,并通过unixsocketperm
来指定文件的权限。
redis 127.0.0.1:6379> config get port
1) "port"
2) "6379"
unixsocket
指定UNIX socket文件的路径
redis 127.0.0.1:6379> config get unixsocket
1) "unixsocket"
2) ""
unixsocketperm
指定UNIX socket文件的权限
redis 127.0.0.1:6379> config get unixsocketperm
1) "unixsocketperm"
2) "0"
bind
Redis服务绑定的主机地址,默认情况下,Redis会响应本机所有可用网卡的连接请求。当然,Redis允许通过bind
配置项来指定要绑定的IP地址。
redis 127.0.0.1:6379> config get bind
1) "bind"
2) ""
timeout
Redis客户端空闲多少秒后自动关闭连接,0表示关闭该功能。
redis 127.0.0.1:6379> config get timeout
1) "timeout"
2) "0"
loglevel
Redis日志记录级别支持四个级别:debug
、verbose
、notice
、warning
,默认为verbose
。
- debug 适用于开发或测试阶段。
- verbose 许多有用的信息,但是没有debug级别信息多。
- notice 适用于生产环境
- warning 仅仅一些重要的消息被记录
redis 127.0.0.1:6379> config get loglevel
1) "loglevel"
2) "notice"
logfile
Redis日志记录方式默认为标准输出stdout
,若配置Redis服务为守护进程方式daemon
运行又配置日志记录为标准输入的话,日志将会发送给/dev/null
。
redis 127.0.0.1:6379> config get logfile
1) "logfile"
2) "Logs/redis_log.txt"
databases
Redis数据库的数量,默认16个。默认使用的数据库是DB 0
,可以通过SELECT dbindex
命令选择一个数据库。
redis 127.0.0.1:6379> config get databases
1) "databases"
2) "16"
快照 SNAPSHOTTING
save
设置Redis进行数据库镜像的频率,配置在多少秒内有多少次更新操作将数据同步到数据文件,可配合多个条件。
save <seconds> <changes>
Redis默认配置提供三个条件
// 900秒(15分钟)内至少1个key值改变,则进行数据库保存--持久化。
save 900 1
// 300秒(5分钟)内至少10个key值改变,则进行数据库保存--持久化。
save 300 10
// 60秒(1分钟)内至少10000个key值改变,则进行数据库保存--持久化。
save 60 1000
redis 127.0.0.1:6379> config get save
1) "save"
2) "jd 900 jd 300 jd 60"
rdbcompression
rdbcompression
指定存储本地数据库时是否压缩数据,默认yes
表示Redis将采用LZF
压缩。若为了节省CPU时间则可关闭此选项,但会导致数据库文件变得巨大。
redis 127.0.0.1:6379> config get rdbcompression
1) "rdbcompression"
2) "yes"
dbfilename
dbfilename
指定本地数据库文件名,rdb
文件的名称。
redis 127.0.0.1:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"
dir
指定本地数据库存放目录,数据目录,数据库的写入会在这个目录。rdb
、aof
文件也会写在这个目录。
redis 127.0.0.1:6379> config get dir
1) "dir"
2) "C:\\redis"
主从复制 REPLICATION
slaveof
设置本机为slave
服务时配置master
服务的IP与端口
slaveof <master_ip> <master_port>
在Redis启动时,会自动从master
进行数据同步
redis 127.0.0.1:6379> config get slaveof
1) "slaveof"
2) ""
Redis主从复制时如何交互的
Redis主从复制交互流程
- Slave服务启动,主动连接Master,并发送SYN命令请求初始化同步。
- Master接收到SYN后,执行
bgsave
命令生成RDB文件,并缓存该时间段内的写命令。 - Master完成RDB文件后将其发送给所有Slave服务器
- Slave服务器接收到RDB文件后,删除内存中旧的缓存数据并装载RDB文件。
- Master在发送完RDB后即向所有Slave服务器发送缓存中的写命令
- 至此初始化完成,后续进行增量同步。
Redis主从复制非常脆弱,一旦Master服务器宕机会导致无法向Redis中读取或写入数据,高可用性极差。
未完待续...