docker的架构包括:镜像、容器、仓库





Docker数据卷挂载时:

可以挂载文件和目录
docker仓库的类型包括公开仓库、私有仓库、镜像仓库

Redis数据库的特点还包括:
开源的、内存型、基于键值对的数据库

还可以存储海量数据




发布者和订阅者的关系
1、一个发布者可以有多个订阅者
2、一个订阅者可以订阅多个发布者
订阅发布相关命令
1、发布:publish
2、订阅:subscribe
1、RDB数据持久化是Redis默认的持久化方式
2、默认备份文件是 dump,rdb
3、指定时间间隔内将内存中的数据集快照写入磁盘
1、只记录写操作,读操作不记录
2、默认备份文件为appendonly.aof
3、备份所有的写命令
配置想aof文件写命令数据的操作策略有:
no、always、everysec
定义:主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相
同的数据
作用:
1、提升数据库系统的请求处理能力;
2、默认实现读写分离机制,Master 以写为主,Slave 以读为主,提升系统的缓存读写性能
3、容灾快速恢复,提升整个系统的可用性:当主节点宕机后,可以立刻提升其中一个从节点为主节点,继续提供服务;
主从复制的两个阶段:
1、全量数据同步
2、增量同步(命令传播)
slaveof参数:指定成为哪一个 master 的节点,将 slave 挂至新的 master 上
slaveof no one:将一台 slave 服务器提升为 Master
命令:info replication:显示主从复制的相关信息
从节点不能写数据实验
总结:
一个 master 节点 可以有多个 slave 节点;
slave 节点故障,读请求的处理性能下降;
master 节点故障,写请求无法执行;
当 master 发生故障,可手动将其中一台 slave 使用 slaveof no one 命令提升为 master,其它 slave 执行 slaveof 命令指向这个新的 master;
主从复制模式的故障转移需要手动操作,要实现自动化处理,这就需要Sentinel 哨兵,实现故障自动转移。
哨兵模式的作用
1、监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作;
2、 提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序;
3、自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会自动进行故障迁移操作。即将一个从服务器升级新的主服务器,并让其他从服务器挂到新的主服务器,同时向客户端提供新的主服务器地址
Sentinel监控原理
Sentinel 基于心跳机制监测服务状态,每隔 1 秒向集群的每个实例发送 ping 命令:
1、主观下线:如果某 sentinel 发现某实例未在规定时间响应,则认为该实例主观下线。
2、客观下线:若超过指定数量(quorum)的 sentinel 都认为该实例主观下线,则该实例客观下线。quorum 值最好超过 Sentinel 实例数量的一半。
启动哨兵节点命令:redis-server.exe .\master_slave\sentinel_26380.conf --sentinel
命令:info sentinel --显示哨兵结构的相关信息
docker有bridge,host 和 none 3 种网络模式
命令docker network ls:查看docker的网络模式,默认情况下,使用的是== bridge 模式
Docker 中的网络接口默认都是虚拟==的接口
命令:docker network inspect bridge:查看默认 bridge 模式下,docker0 网桥的相关信息
命令:docker run --network=bridge:使用 bridge 网络模式创建容器
命令:docker inspect r1:查询 r1的容器内 IP
命令:docker run --network=host :使用 host网络模式创建容器
场景:海量数据存储问题和高并发写的问题
1、Redis Cluster 采用的是基于 P2P 的去中心化的网络拓扑架构,没有中心节点,所
有节点既是数据存储节点,也是控制节点;
2、引入 槽(slot) 的概念,通过 CRC+hashslot 算法支持多个主节点(分片),每个主节
点分别负责存储一部分数据,这样理论上可以支持无限主节点的水平扩容以便支持
海量吞吐量;
3、内置类似哨兵的高可用机制,能够实现自动故障转移,保证每个主节点的高可用。
因此,redis Cluster 集群也叫分片集群,具有分片存储的特性,不需要哨兵也可
以完成故障转移的功能,具有⾼可⽤性,性能优于哨兵模式,可实现⾃动扩容(官⽅建
议不要超过 1000 个节点)。
命令:cluster-enabled yes :开启分片集群;
命令:cluster-config-file 配置文件名:指定分片集群需要使用的节点配置文件名
命令:docker ps -a 或 docker ps :查看 服务器启动情况
命令:docker inspect 容器名或容器 ID --查询一个容器的信息,可看到某个 redis 节点的容器内 IP
命令:redis-cli --cluster help:可查询集群创建相关参数
命令:redis-cli --cluster create 172.17.0.2:6379 172.17.0.3:6380 172.17.0.4:6381
172.17.0.5:26379 172.17.0.6:26380 172.17.0.7:26381 --cluster-replicas 1 创建分片集群
命令:cluster info :显示集群的相关信息
命令:cluster nodes 查看各节点信息,如主从信息,节点 ID 等。
(1)进入 6381 节点容器内:
命令:docker exec -it redis_6381 /bin/bash
(2)连接到 redis 上,如 6381 节点:
命令:redis-cli -c -p 6381
参数说明:==-c ==表示进入集群环境,一定要加上该参数
命令:redis-cli --cluster add-node 新节点 IP 旧节点 IP: 扩容
参数说明:
add-node :添加节点,把新节点加入到指定的集群,默认添加的主节点
如果添加的从节点,则需要以下两个参数:
–cluster-slave : 新节点作为从节点
–cluster-master-id 旧节点:给新节点指定主节点
命令:redis-cli --culuster reshard 集群中任一节点的 IP: 在集群中重新分配 slot 插槽
Jedis:一个很小但很健全的 redis 的 java 客户端,通过 Jedis 可以像使用
Redis 命令行一样使用 Redis;
Lettuce:是基于 Netty 实现的,支持同步、异步和响应式编程方式,并且是线
程安全的。支持 Redis 的哨兵模式、集群模式和管道模式。
SpringDataRedis:Spring 家族的产品,对 Jedis 和 Lettuce 进行了高度封装,
使得 Java 语言对 Redis 的操作更加方便。
定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在
解决办法:
1、对空值进行缓存:
2、采用布隆过滤器:
3、进行实时监控:
4、增强 id 的复杂度,避免被猜测 id 规律;
5、做好数据的基础格式校验;
6、加强用户权限校验

定义:指多台 Web 服务器不能共享 Session 存储空间,当请求切换到
不同 Web 服务器时,导致 session 数据丢失,访问失败。
1、开启定时任务 @EnableScheduling 加在启动类上;
2、设置时间间隔,如:@Scheduled(cron = “0/20 * * * * ?”)
cron 表达式是一个字符串,字符串已空格隔开,分开共 6 或 7 个域,每
一个域代表一个含义,按顺序依次为:
[秒] [分] [小时] [日] [月] [周] [年]
每个字符串元素都是按照插入顺序排序的
消息队列是在消息的传输过程中保存消息的容器。