Redis(下)

一个高性能的key-value数据库。

如何通过Redis做异步队列

lpush 生产消息

lpop/blpop 消费消息

pub/sub:主体订阅模式

subscribe myTopic 订阅该频道

publish myTopic “i love u” 推送消息

RDB持久化

保存某个时间点的全量数据快照。

1
save [TIME time][COUNT count]

在时间内有count条指令则产生一次快照。

Redis每个时间段的读写请求不均衡,为了平衡数据安全和性能进行合理配置,可以有多个save。

SAVE和BGSAVE

SAVE:阻塞Redis服务进程,直到RDB文件被创建。

BGSAVE:Fork一个子进程来创建RDB文件,不会阻塞Redis服务器进程。

自动触发RDB持久化的方式

根据配置文件中的save m n定时触发。

主从复制时,主节点自动触发。

执行Debug Reload

执行Shutdown且没有开启AOF持久化。

RDB持久化的缺点

内存数据全量同步,大量IO影响性能。

可能会因为Redis挂掉丢失数据。

AOF持久化

保存写状态。

记录除了查询以外的数据库指令。

以append形式追加到AOF文件中。

开启AOF

设置配置文件中appendonly为yes。

有always,everysec,no三种工作方式。

AOF文件不断变大

fork()子进程重写AOF同步增量变动。

RDB和AOF混合持久方式

BGSAVE做镜像全量持久化。

AOF做增量持久化。

使用Pipeline的好处

批量执行指令,节省多次IO往返的时间。

Redis Sentinel

解决主从同步Master宕机后的主从切换问题。

流言协议gossip

在杂乱无章中寻求一致。

海量数据的快速查找

分片:数据分散存储在多个节点上。

缺点:无法实现节点的动态增减。

解决:一致性哈希算法。

缺点:数据倾斜问题。

解决:引入虚拟节点。