redis

单线程

redis持久化

基于内存存储,关机后数据失效。
某一时刻,将数据写入磁盘。

存储位置在配置文件的dir配置。
默认文件名称:dffilename

rdb触发持久化

bgsave命令
save命令,会造成线程阻塞
shutdown

rdb

默认开启。dump.rdb文件

reids复制一个一摸一样的进程进行持久化。

将数据写入临时文件

持久化结束后替换上次持久化的文件。不影响主进程。

查看进程可以看到。
可以看到临时文件。、、

宕机,会丢失数据。

rdb持久化能关掉么 ?

注释掉save配置。
注意:主从集群,关不了rdb

原因:主机将rdb文件发给从机

为什么fork一个进程?

redis是单线程,只能做一件事情。

aof

将redis操作日志保存起来,读操作不记录.
默认保存的是redis协议。

appendonly.aof

开启在配置文件中
appedonly: yes

配置

默认一秒执行一次,可能都是1秒数据

日志文件记录过大?

aof重写?
auto-aof-rewrite-Min-size 100G
100过后重写

auto-aof-rwrite-percentage 100

假设100G重写后为80G
下次重写触发为80+80*100%=160G

aof和rdb对比?

rdb适合大规模的数据恢复,对数据完整性要求不是很高,隔一段时间做一次备份。

rdf性能消耗低,丢失数据多。
aop性能消耗高丢失数据多。

集群

单机问题

单机故障,容量瓶颈(持久化文件加大),qps查询效率

主从复制

解决了qps

解决问题: 单机模式

qps查询效率

能干嘛?》

读写分离
主机专门写数据 从机专门读数据
容灾备份
数据备份,避免数据丢失。

问题?

主机挂了,从机不会立马切换。

哨兵

主从复制升级版。
增加哨兵节点(多个)
主机挂了,哨兵会从我们的从节点,选取一台替换主机

解决问题?

解决单机故障。

cluster集群

有小集群组成大的集群环境。
一个master下有两个salve

故障转移期间不可用。

对比哨兵有点?

  1. 故障转移期间,其他小集群仍然可用。
    假如有九个机器,三个小集群,一个故障后,仍然后三分之二纪律可使用
  2. 容量问题解决

缓存的三大问题?

缓存穿透

数据库中没有的数据,缓存中也没有。
起不到保护数据库的作用。

解决方案:缓存空对象

缓存击穿

缓存中没有数据,但是数据库存在数据(一般为缓存时间到期)

很多用户过来访问数据,查询同一个数据,不存在。就会同时查询数据库,同时插入缓存。

缓存雪崩

大部分数据失效。服务器挂了。大量数据在同时时间失效了。。

搭建高可用集群。过期时间,可以设置不同时间。加入缓存。

缓存和数据库一致性