一、Redis.conf配置文件
(1) units:对于大小写不敏感
导入
绑定ip和端口:
(2) 通用:
以守护进程开启,默认为no
进程文件:
日志:
数据库的数量:是16个
是否显示logo:
(3) 快照:(RDB持久化方式)
持久化出错是否还继续工作:
是否压缩rdb文件:
保存rdb文件进行错误校验:
rdb保存文件的目录:
(4) 安全:
给redis加密码:
config set requirepass:
config get requirepass:
客户端设置:
最大内存设置:
内存满了之后的处理策略:
(5) AOF持久化方式:
默认不开始AOF:
持久化文件的名字:
执行同步:
二、Redis(Redis DataBase)持久化 ,Redis是内存数据库,断电即失。
(1) 持久化之RDB (Redis默认是RDB的方式)
RDB 方式,是将 redis 某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法。
redis 在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。备份后会生成一个dump.rdb文件。
对于 RDB 方式,redis 会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何 IO 操作的,这样就确保了 redis 极高的性能。
优点:适合大规模数据的恢复;对数据的完整性要求不高
缺点:最后一次持久化如果宕机了,就会丢失数据。
(2) 持久化之 AOF (以追加的方式来)
1) 原理:AOF 方式是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍,就这么简单。
如果在追加日志时,恰好遇到磁盘空间满、inode 满或断电等情况导致日志写入不完整,也没有关系,redis 提供了 redis-check-aof 工具,可以用来进行日志修复。
因为采用了追加方式,如果不做任何处理的话,AOF 文件会变得越来越大,为此,redis 提供了 AOF 文件重写(rewrite)机制,即当 AOF 文件的大小超过所设定的阈值时,redis 就会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集。举个例子或许更形象,假如我们调用了 100 次 INCR 指令,在 AOF 文件中就要存储 100 条指令,但这明显是很低效的,完全可以把这 100 条指令合并成一条 SET 指令,这就是重写机制的原理。
虽然优点多,但 AOF 方式也同样存在缺陷,比如在同样数据规模的情况下,AOF 文件要比 RDB 文件的体积大。而且,AOF 方式的恢复速度也要慢于 RDB 方式。1
2) AOF重写:(rewrite) 如果文件大小大于64M就会重写,将AOF文件之间的文件进行压缩;
在重写即将开始之际,redis 会创建(fork)一个“重写子进程”,这个子进程会首先读取现有的 AOF 文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的 AOF 文件中,这样做是保证原有的 AOF 文件的可用性,避免在重写过程中出现意外。
当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新 AOF 文件中。
当追加结束后,redis 就会用新 AOF 文件来代替旧 AOF 文件,之后再有新的写指令,就都会追加到新的 AOF 文件中了。
3)缺点:运行效率、恢复速度、文件提及与rdb相比都差一些。
三、Redis发布订阅
Redis 发布/订阅是一种消息传模式,其中发送者(在Redis术语中称为发布者)发送消息,而接收者(订阅者)接收消息。传递消息的通道称为channel。
(1) 原理
本质上通道是所有的消息发布者是一个字典,然后每个字典对应一个链表;所有订阅者都是存储在一个链表中。
(2) 命令:
命令 | 描述 |
---|---|
PSUBSCRIBE | 订阅一个或多个符合给定模式的频道。 |
PUBSUB | 查看订阅与发布系统状态。 |
PUBLISH | 将信息发送到指定的频道。 |
PUNSUBSCRIBE | 退订所有给定模式的频道。 |
SUBSCRIBE | 订阅给定的一个或多个频道的信息。 |
UNSUBSCRIBE | 指退订给定的频道。 |
(3) 订阅实例图:
客户端订阅消息:SUBSCRIBE xxx
发布者通过通道发送信息: PUBLISH xxxx
(4):使用场景:
实时消息
事实聊天
订阅,关注系统
复杂的场景的话就要使用消息中间件:MQ、Kafka等。