• 【学习总结】NoSQL重点归纳


    第一次小测:

    1、数据库类型

    • 键值对数据库:Redis
    • 文档数据库:MongoDB
    • 列式存储数据库:HBase
    • 图形存储数据库:Neo4j

    2、Docker

    2.1 Docker的架构

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

    2.1 Docker的命令

    docker镜像相关命令

    在这里插入图片描述

    docker容器相关命令

    在这里插入图片描述
    在这里插入图片描述

    2.2 Docker容器的数据卷

    在这里插入图片描述
    在这里插入图片描述
    Docker数据卷挂载时:
    在这里插入图片描述

    可以挂载文件和目录

    2.3 Docker仓库的类型

    docker仓库的类型包括公开仓库、私有仓库、镜像仓库

    3、Redis

    3.1Redis概述

    3.1.1 Redis特点

    在这里插入图片描述
    Redis数据库的特点还包括:
    开源的、内存型、基于键值对的数据库

    3.1.2 Redis应用场景

    在这里插入图片描述
    还可以存储海量数据

    3.2Redis操作命令

    3.2.1操作键

    在这里插入图片描述
    在这里插入图片描述

    3.2.2字符串操作

    在这里插入图片描述
    在这里插入图片描述

    3.3发布订阅

    发布者和订阅者的关系
    1、一个发布者可以有多个订阅者
    2、一个订阅者可以订阅多个发布者

    订阅发布相关命令
    1、发布:publish
    2、订阅:subscribe

    3.4数据持久化

    RDB数据持久化

    1、RDB数据持久化是Redis默认的持久化方式

    2、默认备份文件是 dump,rdb
    3、指定时间间隔内将内存中的数据集快照写入磁盘

    AOF数据持久化

    1、只记录写操作,读操作不记录
    2、默认备份文件为appendonly.aof
    3、备份所有的写命令

    配置想aof文件写命令数据的操作策略有:
    no、always、everysec

    第二次小测:

    1、主从复制

    定义:主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相
    同的数据

    作用:
    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 哨兵,实现故障自动转移

    2、哨兵模式

    哨兵模式的作用
    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 --显示哨兵结构的相关信息

    3、Docker下的哨兵模式

    3.1网络模式:

    docker有bridge,host 和 none 3 种网络模式
    命令docker network ls:查看docker的网络模式,默认情况下,使用的是== bridge 模式
    Docker 中的网络接口默认都是
    虚拟==的接口

    3.1.1bridge模式

    命令:docker network inspect bridge:查看默认 bridge 模式下,docker0 网桥的相关信息
    命令:docker run --network=bridge:使用 bridge 网络模式创建容器
    命令:docker inspect r1:查询 r1的容器内 IP

    3.1.2 host模式

    命令:docker run --network=host :使用 host网络模式创建容器

    4、分片集群

    4.1 Docker下的cluster分片集群

    场景:海量数据存储问题和高并发写的问题

    4.1.1**cluster集群架构特点:

    1、Redis Cluster 采用的是基于 P2P 的去中心化的网络拓扑架构,没有中心节点,所
    有节点既是数据存储节点,也是控制节点;
    2、引入 槽(slot) 的概念,通过 CRC+hashslot 算法支持多个主节点(分片),每个主节
    点分别负责存储一部分数据
    ,这样理论上可以支持无限主节点的水平扩容以便支持
    海量吞吐量;
    3、内置类似哨兵的高可用机制,能够实现自动故障转移,保证每个主节点的高可用。
    因此,redis Cluster 集群也叫分片集群,具有分片存储的特性,不需要哨兵也可
    以完成故障转移的功能,具有⾼可⽤性,性能优于哨兵模式,可实现⾃动扩容(官⽅建
    议不要超过 1000 个节点)。

    4.1.2 cluster集群命令:

    命令: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 等。

    4.2 Redis分片集群的操作和故障处理

    4.2.1 操作分片集群

    (1)进入 6381 节点容器内:
    命令:docker exec -it redis_6381 /bin/bash
    (2)连接到 redis 上,如 6381 节点:
    命令:redis-cli -c -p 6381
    参数说明:==-c ==表示进入集群环境,一定要加上该参数

    4.2.2 分片集群的扩容与缩容
    扩容:

    命令:redis-cli --cluster add-node 新节点 IP 旧节点 IP: 扩容
    参数说明:
    add-node :添加节点,把新节点加入到指定的集群,默认添加的主节点
    如果添加的从节点,则需要以下两个参数:
    –cluster-slave : 新节点作为从节点
    –cluster-master-id 旧节点:给新节点指定主节点

    命令:redis-cli --culuster reshard 集群中任一节点的 IP: 在集群中重新分配 slot 插槽

    第三次小测:

    1、Java访问redis (week 10)

    Java 语言访问 Redis,常用的 API 包括:

    Jedis:一个很小但很健全的 redis 的 java 客户端,通过 Jedis 可以像使用
    Redis 命令行一样使用 Redis;
    Lettuce:是基于 Netty 实现的,支持同步、异步和响应式编程方式,并且是线
    程安全的。支持 Redis 的哨兵模式、集群模式和管道模式。
    SpringDataRedis:Spring 家族的产品,对 Jedis 和 Lettuce 进行了高度封装,
    使得 Java 语言对 Redis 的操作更加方便。

    2、Redis缓存机制

    (1)缓存击穿 (week 11)

    定义:缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在
    解决办法:
    1、对空值进行缓存
    2、采用布隆过滤器:
    3、进行实时监控:
    4、增强 id 的复杂度,避免被猜测 id 规律;
    5、做好数据的基础格式校验;
    6、加强用户权限校验

    (2)缓存雪崩:

    在这里插入图片描述

    3、Redis在身份认证中的应用

    (1)Session 共享问题

    定义:指多台 Web 服务器不能共享 Session 存储空间,当请求切换到
    不同 Web 服务器时,导致 session 数据丢失,访问失败。

    4、Redis在排行榜中的应用

    (1)定时任务:

    1、开启定时任务 @EnableScheduling 加在启动类上;
    2、设置时间间隔,如:@Scheduled(cron = “0/20 * * * * ?”)
    cron 表达式是一个字符串,字符串已空格隔开,分开共 6 或 7 个域,每
    一个域代表一个含义,按顺序依次为:
    [秒] [分] [小时] [日] [月] [周] [年]

    5、Redis在消息队列中的应用

    (1) List 数据类型的特点

    每个字符串元素都是按照插入顺序排序

    (2) List 在消息队列功能中的应用

    消息队列是在消息的传输过程中保存消息的容器。

  • 相关阅读:
    董事长、CEO、总裁、总经理、总监的区别
    虚拟内存 & I/O & 零拷贝总结
    【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(四)
    Mac环境安装和使用supervisor
    python OS+autoit实现自动化,易报错点
    职场写作(一)怎么让写作促成结果
    【C++】之类和对象 - 构造与析构
    使用Github Copilot生成单元测试并执行
    线性回归基本原理和公式推导
    2020年09月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 原文地址:https://blog.csdn.net/m0_51290571/article/details/127651870