1.持久化

1、为什么要持久化

持久化的目的是当Redis宕机后数据不会丢失,其主要实现原理是把内存中的数据持久化到磁盘中,这个过程就是持久化。

2、持久化的两种方式

持久化有两种方式,实现方式也有所不同。分别是RDB,AOF。

1)RDB
RDB的实现原理是以快照的方式进行持久化。 在一定时间间隔内进行快照。把数据进行保存到磁盘。触发RDB的方式有三种:save命令、bgsave命令、配置redis配置文件。

redis集群怎么保证原子_持久化

redis集群怎么保证原子_redis_02

可以把dump.rdb放入到redis启动目录下。 当redis再次被启动时则会加载该数据。

redis集群怎么保证原子_数据_03

save和bgsave 都是触发的命令但是他们的 方式不一样save是同步在生成rdb文件时其他操作需要等待,bgsave是异步当时不影响其他操作进行。如果rdb文件太大会影客户端的体验。

配置文件redis.conf(命令默认是bgsave)

redis集群怎么保证原子_redis集群怎么保证原子_04

2)AOP提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录

AOF默认是没有开启。需要配置手动开启。

redis集群怎么保证原子_持久化_05

redis集群怎么保证原子_持久化_06

redis集群怎么保证原子_redis_07

redis集群怎么保证原子_redis集群怎么保证原子_08

重新打开文件存在

redis集群怎么保证原子_redis集群怎么保证原子_09

(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒
钟的数据。
(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。
(3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写

(4)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大.
(5) 恢复数据时时间要比快照模式慢很多。

2.集群

搭建集群的目的是为了分担单个redis的压力

1)搭建

在不同的服务器上启动redis,对于从服务区执行slaveof ip port 命令分配主机

redis集群怎么保证原子_redis_10

在主机上查看输入info replication命令

redis集群怎么保证原子_redis_11

主机能插入和查看,从机只能查看

redis集群怎么保证原子_持久化_12

从机

redis集群怎么保证原子_持久化_13

这样有一个弊端,如果主机宕机将不能存储,于是引入了哨兵。哨兵是用来监听主机,如果主机宕机会进行分配。启动哨兵的文件是sentinel.conf,我们进行查看 

redis集群怎么保证原子_持久化_14

让主机宕机 哨兵检测主机已经宕机

redis集群怎么保证原子_redis集群怎么保证原子_15

redis集群怎么保证原子_redis集群怎么保证原子_16

redis集群怎么保证原子_redis集群怎么保证原子_17

3)去中心化哨兵都没有解决写并发量高的情况所以设置一种新的模式,通过HASH算法匹配不同的节点

redis集群怎么保证原子_redis_18

redis-cli --cluster create --cluster-replicas 1 192.168.5.4:7000 192.168.5.4:8000 192.168.5.4:9000 192.168.5.4:7001 192.168.5.4:8001 192.168.5.4:9001

redis集群怎么保证原子_redis集群怎么保证原子_19

客户端访问:

redis-cli -c -h 127.0.0.1 -p 7000
 

不同的key分配不同的节点

redis集群怎么保证原子_数据_20

redis集群怎么保证原子_redis_21