1.redis
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
2. 正文
1. redis的持久化 2. redis的集群 3. java操作redis 4. springboot整合redis
3. redis的持久化
3.1 什么是持久化?
1. 把内存中的数据持久化到磁盘。这个过程就是持久化。 当redis启动时会从磁盘上读取数据并加载到内存。
3.2 持久化的好处
1. 使redis宕机后数据不会丢失。
3.3 redis持久化的方式
1. RDB: 以快照的方式进行持久化。 在一定时间间隔内进行快照。把数据进行保存到磁盘。 2. AOF: 会把每次对redis的写操作命令追加到一个日志尾,当redis启动时则把该日志中的命令执行一遍.
4. RDB的持久化方式。
4.1 什么时候会触发RDB. ----默认dump.rdb
1. save命令 2. bgsave命令 3. 配置redis配置文件。
4.2 save和bgsave的区别
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下
执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。我们的客户端可能都是几万或者是几十万,这种方式显然不可取。
bgsave执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程如下:
4.3 通过配置文件来触发RDB ----- bgsave命令
4.4 恢复数据
可以把dump.rdb放入到redis启动目录下。 当redis再次被启动时则会加载该数据。
4.5 rdb持久化方式的优缺点
优点:
(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。
(2)bgsave生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。
(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。
缺点:
快照持久化期间修改的数据不会被保存,可能丢失数据。数据完整性比较差。
5. AOF持久化方式
提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
AOF默认是没有开启。需要配置手动开启。
5.2 什么时候会触发aof
当进行写操作则会把写的命令放入appendonly.aof
5.3 aof的优缺点
-
优点:
(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒,通过一个后台线程执行一次fsync操作,最多丢失1秒钟的数据。 (2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。 (3)AOF日志文件即使过大的时候,出现后台重写操作,也不会影响客户端的读写
2.缺点
(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大. (2) 恢复数据时时间要比快照模式慢很多。
6. redis的集群
6.1 redis主从关系
6.2 如何搭建主从关系
1. 准备三台机器 (1 主节点 2 从节点) 为了节省资源 在一个虚拟机上启动三台redis 只是他们的端口号不同
6.3 搭建主从的关系
1.配从不配主 (1)配置redis配置文件 2001(主) 2002(从) 2003(从) (2)修改rdb持久化文件的路径以及端口
分别其他01 02 03
分别连接不同的redis服务
检验上面上个redis服务之间的关系
、
上面三个redis服务之间是没有任何主从关系。
可以通过以下命令设置 02 03 跟随01混
输入上面命令后再查询某个节点的关系时 会出现如下结果
通过测试我们知道 主节点可以负责读写操作,但是从节点只能负责读操作。
思考:
如果主节点宕机了,那么从节点会不会上位。还是等待老大的归来。[等待老大归来]
如果新增一个从节点,该从节点会从当前增加的不会添加数据还是会和所有节点数据同步?【同步】
主从关系的缺点:
如果主节点挂掉,则从节点无法上位,导致客户端无法进行写操作了。
6.4 搭建哨兵模式
如何设置哨兵模式启动哨兵
启动哨兵 redis-sentinel sentinel.conf
测试让01宕机 shutdown
思考:
如果01回来了,老大会是谁?
6.5 redis集群搭建---去中心化
上面主从还是哨兵都没有解决写并发量高的情况。
配置三主三从
1. 8001 8002 2. 7001 7002 3. 9001 9002
port 8001
bind 0.0.0.0
daemonize yes
appendonly yes 必须有aof持久化
# 开启集群
cluster-enabled yes 833行
# 集群的配置文件,该文件自动生成
cluster-config-file nodes-8001.conf 841行
# 集群的超时时间
cluster-node-timeout 5000 847行
其他上面这些端口号的redis
为上面这些redis分配主从关系以及槽。
---主节点后只有一个从节点 redis-cli --cluster create --cluster-replicas 1 192.168.25.3:7001 192.168.25.3:8001 192.168.25.3:9001 192.168.25.3:7002 192.168.25.3:8002 192.168.25.3:9002
==必须保证aof开启,保证redis中没有数据。==
客户端访问:
redis-cli -c -h 127.0.0.1 -p 8001