「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
谦谦君子,卑以自牧也。
Redis 是项目开发中缓存应用的重要组成,Redis 使用主要分为 string、list、hash、set、zset 等5种数据结构。Redis的应用不止缓存,在计数、分布式锁、位操作、bitmap、排行榜等业务场景均有其独特的应用。
既然 Redis 如此的重要,那么我们就从 Redis 的配置文件开始,分析其重要配置。
Redis启动
Redis 怎么开启单机多实例呢,如果使用 Centos yum 进行安装的话,只能使用 service redis start|stop|restart 等命令。如果想要实现多实例,必须是要 tar 包进行安装。
# 指定不同的配置文件启动即可实现单机多实例安装,要注意端口号不能有重复。
./redis-server /path/to/redis1.conf
./redis-server /path/to/redis2.conf
Redis 网络设置
网络是 redis 必须配置的,bind 是用来限制计算机的访问,protected-mode 是redis本身的一个安全层,开启防护的条件比较严格:
- 1 没有设置bind 条件
- 2 没有设置访问密码
- 3 protected-mode= yes
# 就是用来限制只有本机可以连接redis服务连接
bind 127.0.0.1
# 就是用来允许任意计算机都可以连接redis服务连接。
bind 0.0.0.0
所以感觉这个 保护模式有些鸡肋。
端口号 port 就不用多讲了,redis 的默认端口 为 6379,不过一般都会有改动,否则自己的服务就有可能裸奔了。
# 我不会告诉你我的习惯是改成 6579的
port 6379
超时设置是一个很有意思的配置项,如果设置为0,则没有超时时间,如果大于0 则配置时间生效。这里说一下超时的配置时间单位为秒(s)。
timeout 0
网络保持时间,如果设置为非0,则可以使用服务器端的 SO_KEEPALIVE 发送 tcp acks 检测客户端是否断联。这有两个用处:
- 1 检测断联客户端
- 2 降低网络中间设备出问题而导致网络看似连接却已经断开。
tcp-keepalive 300
Redis 通用配置
redis 通用配置是再项目中经常用到的配置,这里知识列举一下,仅是当做巩固来看。
# redis 是否后台启动
daemonize no
# 设置数据库的个数,也就是槽的个数,默认为16个,如果是集群,这里就是0
databases 16
# dump文件的名称
dbfilename dump.rdb
# linux系统中,一切皆文件,每个应用启动后都会将自己的进程号放进一个文件中,启动前会进行检查文件的值
pidfile /var/run/redis_6379.pid
# redis 的日志级别设置
loglevel notice
# 使用rdb文件快照存储时,存储的时间间隔
# 1小时至少一个、5分钟至少一个、1分钟至少一个key 发生变化就会触发 save 操作
save 3600 1
save 300 100
save 60 10000
# 设置连接的密码
requirepass foobared
Redis 命令重命名
Redis 作为经常使用的命令,在使用中通过会禁用一部分的命令,以防止误操作造成的影响,比如 keys 和 flush 都是需要禁用的,这里觉得重命名命令比较重要,所以进行单列。
## 必禁命令,线上用这种查询方式绝对是不对的
rename-command KEYS ""
## 清空数据的命令必须禁止
rename-command FLUSHALL ""
rename-command FLUSHDB ""
## 重命名 config 配置参数命令
rename-command CONFIG "AAB"
Redis 数据保存
大家都知道 redis 支持 rdb 和 aof 两种方式,还支持两种方式结合的方式,那么怎么开启呢?
## 设置为yes即可开启aof和rdb相结合的方式
aof-use-rdb-preamble yes
## aof 重写的最小大小为64mb,即如果文件大小小于64不会进行重写,当文件大小超过重写前的大小100%时,就会触发重写操作。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 数据同步方式 每一次操作、每秒钟、不设置,不设置不是不进行同步,而是交给操作系统进行异步处理。
# appendfsync always
appendfsync everysec
# appendfsync no