一个高性能的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
在杂乱无章中寻求一致。
海量数据的快速查找
分片:数据分散存储在多个节点上。
缺点:无法实现节点的动态增减。
解决:一致性哈希算法。
缺点:数据倾斜问题。
解决:引入虚拟节点。