1. redis配置文件**
工作中一些小小的配置,可以让你脱颖而出!
单位配置
可以包含其他文件
网络
bind 127.0.0.1 # 绑定的ip
protected-mode yes # 是否受保护
port 6379 # 端口设置
通用 GENERAL
daemonize no # 以守护进程的方式运行,默认是no我们需要手动开启为yes!否则你一退出进程便会结束
# 日志
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably) 生产环境
# warning (only very important / critical messages are logged)
loglevel notice # 日志级别默认为notice
logfile "" # 日志的文件位置名
databases 16 # 设置redis的数据库的数量
always-show-logo yes# 设置服务开启时那个蜂窝煤的logo是否显示
快照
持久化,在规定时间内,执行了多少次操作,则会持久化到 .rdb 和 .aof
redis是内存数据库,如果没有持久化,那么数据就会断电即失
save 900 1 # 如果在900s内,有至少一个key进行了修改,redis就自动进行持久化操作
save 300 10 # 如果在300s内,有至少10个key进行了修改,redis就自动进行持久化操作
save 60 10000 # 如果在60s内,有至少10000个key进行了修改,redis就自动进行持久化操作
stop-writes-on-bgsave-error yes # 持久化如果出错了,是否还需要继续工作
rdbcompression yes # 是否压缩rdb文件, 需要消耗一些cpu文件
rdbchecksum yes # 保存rdb文件时是否进行错误校验
dir ./ # 持久化文件保存的目录
CLIENTS 限制
maxclients 10000 # 设置能连接上redis的最大客户端的数量
maxmemory <bytes> # 配置最大的内存容量
APPEND ONLY MODE 模式 aof配置
appendonly no # 默认是不开启aof的模式,默认是使用rdb方式持久化的
appendfilename "appendonly.aof" # 持久化后的aof文件的名字
# appendfsync always # 每次修改都会同步 消耗性能
appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据
# appendfsync no # 不同步,这个时候操作系统自己同步数据,速度最快
2.Redis持久化
RDB
面试工作持久化是重点!
rdb保存的文件是dump.rdb 都是在我们的配置文件中的快照中进行配置的!
持久化规则
触发redis持久化规则
1.save的规则满足的情况下,会自动触发rdb规则 进行数据的持久化
2.执行flushall命令, 也能触发我们的rdb规则进行数据的持久化
3.退出redis,也会触发redis规则 产生rdb文件
如果恢复rdb文件!
1.只需要将rdb文件存放在我们redis启动目录就可以, redis启动的时候会自动检查dump.rdb回复其中数据!
2.查看需要存在的位置
优点:
- 适合大规模的数据恢复!
- 对数据的完整性要求不高
缺点:
- 需要一定的时间间隔。如果redis意外宕机了,那么可能最后一次修改的数据就没了
- fork进程的时候,会占用一定的内存空间
AOF(Append Only File)
将我们的所有的命令都记录下来,相当于历史记录history, 恢复的时候就把这个文件里全部命令执行一遍
以日志的形式来记录每个写操作,将redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
Aof保存后的文件名是appendonly.aof文件
默认是不开启的,我们需要手动进行配置!我们只需要将appendonly改成yes就开启了aof!
重启,redis就可以生效了!
如果aof文件有错误,这时候redis是启动不起来的,我们需要修复aof这个文件。
redis给我们提供了一个工具
redis-check-aof --fix # 修改错误的aof文件
优点:
- 每一次修改都同步,文件的完整性会更好
- 从不同步,效率更高
缺点:
-
相对于数据文件来说,aof文件远远大于rdb文件,修复的速度也比rdb慢
-
aof运行的效率也要比rdb慢
3.发布订阅
订阅端
127.0.0.1:6379> SUBSCRIBE xiaopeng # 订阅一个频道“xiaopeng”
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "xiaopeng"
3) (integer) 1
# 等待读取推送者信息
1) "message" # 消息
2) "xiaopeng" # 消息频道
3) "hello_xiaopeng" # 消息内容
1) "message"
2) "xiaopeng"
3) "\xe4\xbd\xa0\xe5\xa5\xbd"
1) "message"
2) "xiaopeng"
3) "hi\xef\xbc\x8cxiaoming"
发布端
127.0.0.1:6379> PUBLISH xiaopeng "hello_xiaopeng"
(integer) 1
127.0.0.1:6379> PUBLISH xiaopeng "你好"
(integer) 1
127.0.0.1:6379> PUBLISH xiaopeng "hi,xiaoming"
(integer) 1
发布订阅原理
实用场景
-
实时消息系统!
-
实时聊天!(频道当成聊天室,将信息回显给所有人即可!)
-
订阅,关注系统都是可以的
稍微复杂的场景可以用消息队列来实现MQ(kafka…)
4.Redis主从复制
1主人—n仆从
环境配置
复制3个配置文件,然后修改对应的信息
-
端口
-
pid名字
-
log文件名字
-
dump文件的名字
最后分别根据配置文件进行启动redis服务,启动完成后
ps -ef|grep redis # 查看关于redis的进程
查看当前连接的服务端的信息
127.0.0.1:6379> info replication # 查看当前库的信息
# Replication
role:master # 角色 master
connected_slaves:0 # 没有从机
master_replid:1266649e506176617c47d015ad631ad27dbacd7d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
一主二从
默认情况下,每台redis服务器都是主节点; 我们一般情况下只用配置从机就好了!认老大。
命令行进行配置
一主(6379)二仆(6380/6381)
SLAVEOF 192.168.198.137 6379 # 认SLAVEOF 192.168.198.137 6379这个服务当老大
以上的主从配置是通过客户端 输入命令进行配置的,是暂时的。 在实际开发中是在配置文件中配置主从复制的,这样的话主从复制就是永久的了
配置文件进行配置
细节
主机可以设置值,从机不可以设置值。即主机可以执行写操作(然后同步到从机上),但是从机不能执行写操作,只能读!
主机写:
从机只能读:
测试:主机断开连接,从机依旧连接到主机,但是没有写操作。如果这个时候主机回来了,从机依旧可以直接获取到主机写的信息! 如果是从机断开后,再次连接主机时会再次完全同步主机上的数据(全量复制)。
如果没有老大了,这时候能不能选择一个新的机器做老大呢?手动?
如果主机宕机了断了连接,我们可以使用SLAVEOF no one 让自己变成老大!如果这时候之前的老的修复了、重新连接上了,还需要我们重新配置主从关系(这是手动的,不推荐!)
哨兵模式
1.新建sentinel.conf文件
vim sentinel.conf
2.简单配置哨兵配置文件
# sentinel monitor 被监控的名称 ip地址 端口号 几台哨兵确定主机死亡
sentinel monitor myredis 192.168.198.137 6379 1
3.启动哨兵
./redis-sentinel zpwconfig/sentinel.conf
当主机宕机后过段时间哨兵会在剩下的从机中重新选举主机,即使之前的主机再次上线也只能当做别人的从机(谋朝篡位)