编译安装
cd /usr/local/src
wget https://download.redis.io/redis-stable.tar.gz
tar -zxvf redis-stable.tar.gz
mv redis-stable /usr/local/redis
cd /usr/local/redis
make test
make install
mkdir /usr/local/redis/bin
mkdir /usr/local/redis/db
把 src 目录下的可执行文件拷到 bin:
cp /usr/local/redis/src/mkreleasehdr.sh /usr/local/redis/bin/
cp /usr/local/redis/src/redis-benchmark /usr/local/redis/bin/
cp /usr/local/redis/src/redis-check-rdb /usr/local/redis/bin/
cp /usr/local/redis/src/redis-cli /usr/local/redis/bin/
cp /usr/local/redis/src/redis-server /usr/local/redis/bin/
生产环境 redis.conf 关键项
# 修改为守护模式
daemonize yes
# 设置进程锁文件
pidfile /usr/local/redis/db/redis.pid
# 端口
port 6379
# 客户端超时时间
timeout 300
# 日志级别
loglevel debug
# 日志文件位置
logfile /usr/local/redis/db/log-redis.log
# 数据库数量,默认 16,可用 SELECT 指定
databases 16
# 快照触发条件:秒数 + 变更次数
save 900 1
save 300 10
save 60 10000
# 存储至本地数据库时是否压缩(LZF),关闭可省 CPU 但文件变大
rdbcompression yes
# 本地数据库文件名与路径
dbfilename dump.rdb
dir /usr/local/redis/db/
# 是否每次更新后记录日志
appendonly no
# 更新日志条件:no / always / everysec
appendfsync everysec
上面三处路径(
pidfile、logfile、dir)请按实际安装目录修改。
redis.conf 完整参数参考
全局
# 单位换算:1k => 1000 bytes,1kb => 1024 bytes,大小写不敏感
daemonize no # 是否以守护进程运行
pidfile /var/run/redis.pid # pid 文件路径
port 6379 # 监听端口,0 表示不监听 TCP
# bind 127.0.0.1 # 绑定主机地址,不绑定则监听所有接口
timeout 0 # 客户端闲置多久后关闭连接,0 表示关闭该功能
loglevel verbose # debug / verbose / notice / warning
logfile stdout # 日志方式,守护进程 + 标准输出会发给 /dev/null
databases 16 # 数据库数量,dbid 从 0 到 databases-1
快照(SNAPSHOTTING)
save 900 1
save 300 10
save 60 10000
# 注释掉所有 save 行即取消同步
rdbcompression yes # RDB 文件是否 LZF 压缩
dbfilename dump.rdb
dir ./ # 工作目录,只能指定目录不能指定文件名
主从复制(REPLICATION)
# slaveof <masterip> <masterport> # 设置 master 的 IP 与端口
# masterauth <master-password> # master 有密码时,slave 连接用
slave-serve-stale-data yes # 与 master 断开时是否继续响应旧数据
# repl-ping-slave-period 10 # slave 向 server 发 PING 的间隔
# repl-timeout 60 # 批量传输 / master 响应超时
repl-timeout一定要大于repl-ping-slave-period,否则低流量时会被判定超时。
安全(SECURITY)
# requirepass foobared # 连接密码,客户端需用 auth <password>
# 重命名危险命令,避免共享环境下被滥用
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
# rename-command CONFIG "" # 改名成空字符串即彻底禁用
限制(LIMITS)
# maxclients 128 # 最大客户端连接数,0 表示不限制
# maxmemory <bytes> # 最大内存限制
# maxmemory-policy volatile-lru
# maxmemory-samples 3 # LRU / TTL 近似算法的采样数量
淘汰策略:volatile-lru(对设了 expire 的 key 用 LRU)、allkeys-lru(所有 key 用 LRU)、volatile-random、allkeys-random、volatile-ttl(移除最近要过期的)、noeviction(不淘汰,写操作直接报错)。
maxmemory更适合把 Redis 当缓存用的场景;当真正的数据库使用时内存增长是可预期的,加上限反而可能在写操作时报错甚至导致数据不一致。
AOF(APPEND ONLY MODE)
appendonly no
# appendfilename appendonly.aof
appendfsync everysec # no(快) / always(慢但安全) / everysec(折衷,默认)
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
开启 AOF 后 Redis 启动时会从日志加载数据,忽略 dump.rdb。
慢日志(SLOW LOG)
slowlog-log-slower-than 10000 # 单位微秒,1000000 = 1 秒;负数禁用,0 记录所有命令
slowlog-max-len 1024 # 慢日志队列长度,可用 SLOWLOG RESET 回收内存
虚拟内存(已废弃)
### WARNING! Virtual Memory is deprecated in Redis 2.4,强烈不建议使用
vm-enabled no
vm-swap-file /tmp/redis.swap
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
高级配置(ADVANCED CONFIG)
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
这些是各数据结构的紧凑编码阈值,元素数量或最大元素超过阈值后转为普通编码。对延迟要求极苛刻的环境可设 activerehashing no。
引入其他配置
# include /path/to/local.conf
# include /path/to/other.conf
同一主机上多个 Redis 实例可共用一份基础配置,各自再 include 自己的差异项。