MongoDBRedis基础知识

news2024/11/13 8:00:02

MongoDB&Redis基础知识

  • 1. MongoDB简介
  • 2. Redis

关系型数据库遵循ACID原则:

  • 原子性
  • 一致性
  • 独立性
  • 持久性

分布式系统:由多台计算机和通信的软件组件通过计算机网络连接组成,分布式系统是建立在网络之上的软件系统,因为软件的特性,所以分布式系统具有高度的内聚性和透明性。

网络和分布式系统之间的区别更多的在于高层软件而不是硬件

分布式计算的有点:

  • 可靠性
  • 可扩展性
  • 资源共享
  • 灵活性
  • 高速
  • 开放
  • 高性能

1. MongoDB简介

由C++语言编写的,基于分布式文件存储的开源数据库系统。

在高负载时,添加更多节点,可以保证服务器的性能。

MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案

MongoDB将数据存储为一个文档,数据结构由键值对构成,类似json对象,字段值可以包含其他文档、数组以及文档数组

特点:

  • 面向文档存储的数据库
  • 在MongoDB记录中设置任何属性的索引来实现更快的排序和查找
  • 支持丰富的查询表达式
  • map/reduce进行数据的批量处理和聚合操作
  • 允许服务执行脚本(JavaScript)
  • 支持各种编程语言

基础
在这里插入图片描述

2. Redis

全名remote dictionary server,是一个开源的使用ANSI C语言编写的,支持网络,可基于内存,可持久化的日志型,键值对数据库。

与MYSQL数据库不同的是,redis的数据存于内存中,读写速度非常快,每秒可以处理超过10万次读写操作。因此redis被广泛应用于缓存中

此外redis也经常用于做分布式锁,并支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案

五种基本数据类型:

  • 字符串:使用SDS封装

使用simple dynamic string的原因:一些基础操作更加高效:获取字符串长度O(1)时间复杂度

空间预分配

惰性空间释放

二进制安全

  • 哈希:哈希类型指v值本身又是一个键值对
  • 列表:存储多个有序字符串

应用场景:栈、队列、有限集合、消息队列

  • 集合:保存多个字符串元素,不允许重复元素
  • 有序集合:已排序的字符串集合,元素不能重复

三种特殊结构:

  • geospatial:地理位置定位,存储地理位置信息
  • hpyerloglog:用于做基数统计算法的数据机构,如统计网站的UV
  • bitmap:位图,用比特位映射元素状态

在这里插入图片描述

MYSQL索引为了提高效率,选择了B+树的数据结构

跳跃表是redis特有的数据结构,在链表的基础上,增加多级索引提升查找效率

合理的线程模型:

I/O多路复用:让单个线程高效的处理多个连接请求,使用epoll作为技术上的实现,redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多时间

  • I/O :网络 I/O
  • 多路 :多个网络连接
  • 复用:复用同一个线程。
  • IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。

单线程模型

Redis是单线程模型的,而单线程避免了CPU不必要的上下文切换和竞争锁的消耗。也正因为是单线程,如果某个命令执行过长(如hgetall命令),会造成阻塞。Redis是面向快速执行场景的数据库。,所以要慎用如smembers和lrange、hgetall等命令。
Redis 6.0 引入了多线程提速,它的执行命令操作内存的仍然是个单线程。

redis自己构建了VM机制:

虚拟内存机制就是暂时把不经常访问的数据(冷数据)从内存交换到磁盘中,从而腾出宝贵的内存空间用于其它需要访问的数据(热数据)。通过VM功能可以实现冷热数据分离,使热数据仍在内存中、冷数据保存到磁盘。这样就可以避免因为内存不足而造成访问速度下降的问题。

缓存穿透: 读请求访问时,缓存和数据库都没有某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。

产生原因:

  • 业务不合理的设计,比如大多数用户都没开守护,但是你的每个请求都去缓存,查询某个userid查询有没有守护。
  • 业务/运维/开发失误的操作,比如缓存和数据库的数据都被误删除了。
  • 黑客非法请求攻击,比如黑客故意捏造大量非法请求,以读取不存在的业务数据。

如何避免缓存穿透?

1.如果是非法请求,我们在API入口,对参数进行校验,过滤非法值。
2.如果查询数据库为空,我们可以给缓存设置个空值,或者默认值。但是如有有写请求进来的话,需要更新缓存哈,以保证缓存一致性,同时,最后给缓存设置适当的过期时间。(业务上比较常用,简单有效)
3.使用布隆过滤器快速判断数据是否存在。即一个查询请求过来时,先通过布隆过滤器判断值是否存在,存在才继续往下查。

缓存雪奔: 指缓存中数据大批量到过期时间,而查询数据量巨大,请求都直接访问数据库,引起数据库压力过大甚至down机。

Redis 故障宕机也可能引起缓存雪奔。这就需要构造Redis高可用集群

缓存击穿: 指热点key在某个时间点过期的时候,而恰好在这个时间点对这个Key有大量的并发请求过来,从而大量的请求打到db

解决方案:

使用互斥锁方案。缓存失效时,不是立即去加载db数据,而是先使用某些带成功返回的原子操作命令,如(Redis的setnx)去操作,成功的时候,再去加载db数据库数据和设置缓存。否则就去重试获取缓存。

“永不过期”,是指没有设置过期时间,但是热点数据快要过期时,异步线程去更新和设置过期时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统论文导读(七):Response-Time Analysis for Mixed Criticality Systems——混合关键系统的响应时间分析

目录 一、论文核心思想 二、案例引入 三、基础定义 四、分区关键性调度 (PC) 五、SMC调度 5.1 调度流程 5.2 响应时间分析(考虑EDF分配) 5.3 优先级分配 六、AMC调度 6.1 调度流程 6.2 响应时间分析(考虑EDF分配) 6.3 AMC…

Cesium 核心概念 核心接口

Cesimum 可以做什么 Cesium 是一个开源的3D地球可视化引擎,它可以在Web浏览器中以高性能和高质量呈现全球范围内的地球表面数据。 Cesium 可以用于以下领域: 地理信息系统:Cesium 可以呈现地球表面上的各种地理信息数据,包括卫…

【Python入门】NumPy 数组裁切及数据类型

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 裁切数组 python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。 我们像这样传递切片而不是索引:[start:end]。 我们还可以定义步长,如下所示:[start&#x…

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么? 1.RabbitMQ简介 RabbitMQ是有erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 常见的消息队列有:RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…

设计模式 --- 创建者模式

一、概述 创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。 创建型模式分为: 单例模式 工厂方法模式 抽象工程模式 原型…

【linux】yum “应用商店” 的基本用法

好多工具 yum软件包查看软件包安装软件卸载软件 yum 通俗的讲,这就似我们手机上的应用商店,只不过是在linux下的。 我们可以用yum来下载东西。 软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样…

【Linux 命令】chroot

文章目录 一、背景二、语法三、案例3.1 命令3.2 系统调用3.3 查找服务是否存在于 chrooted 监禁内 四、注意事项 chroot 用来在指定根目录运行命令(即指定 / 的位置),不可操作指定目录之外的地方。其是一种非常简单的资源隔离化操作&#xff…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中,需要频繁的更新docker镜像,然而默认情况下,docker的2375端口是关闭的,下面介绍如何打开端口。 修改docker配置文件 操作步骤: 1.1、修改配置 登录docker所在服务器,修改docker…

web前端实验5

实 验 报 告 课 程 Web前端应用开发 实验项目 Jquery AJAX编程 成 绩 专业班级 班内序号 指导教师 姓 名 学 号 实验日期 实验目的及要求: (1) 理解和掌握Jquery AJAX的get方式请求 (2) 理解和掌握Jquery AJAX的pos…

释放ChatGPT潜能:4款高效插件让你的AI助手更强大

你的ChatGPT页面是什么样的?是这样的吗? 今天我要向大家推荐四款「ChatGPT免费插件」。这些插件是我们在与GPT日常交流中,使用频率最高的四个工具。 一旦安装这些插件,你的GPT将立即变身为「超级ChatGPT」。使用起来更为流畅&am…

BEV+Transformer对无人驾驶硬件体系的巨大改变

摘要: BEVTransformer彻底终结了2D直视图CNN时代,BEVTransformer对智能驾驶硬件系统有着什么样的影响?背后的受益者又是谁? 图片来源:特斯拉 BEVTransformer是目前智能驾驶领域最火热的话题,没有之一&…

【大数据平台开发】【Web框架】001Django框架简介

【大数据平台开发】【Web框架】001Django框架简介 文章目录 【大数据平台开发】【Web框架】001Django框架简介一. Django简介与安装1.1 Django安装1.2 Django简介1.3 框架功能简介 二. Django框架的最小程序2.1 新建工程2.2 修改工程2.3 运行工程2.4 django-admin与manage.py2.…

(二)EalsticSearch 辅助工具 Kibana 介绍与安装

1、什么是 kibana ? Kibana 是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff…

Python高光谱遥感数据处理与机器学习

Python高光谱遥感数据处理与机器学习 第一章、高光谱基础 高光谱遥感简介 什么是高光谱遥感? 高光谱遥感为什么重要? 高光谱遥感与其他遥感技术的区别是什么? 高光谱遥感的历史和发展 高光谱传感器与数据获取 高光谱传感器类型 如何获…

RHCE第五次作业

目录 一、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间 1.创建脚本test1.sh 2.下载邮件服务并执行 3.测试 4.做计划 二、 判断web服务是否运行(1、查看进程的方式判断该程序…

Node内置模块 【操作系统os模块】

文章目录 🌟前言🌟os模块🌟使用🌟属性🌟方法🌟获取操作系统临时目录🌟获取操作系统主机名🌟获取操作系统CPU架构🌟识别操作系统平台🌟获取操作系统发行版本&a…

MPLS VPN 实验

目录 MPLS VPN 实验 拓扑图 实验目的 基础配置 R2 R3 R4 公网部分配置IGP(ospf) R2 R3 R4 激活MPLS R2 R3 R4 VRF创建 R2 R4 将接口画入VRF空间 R2 R4 配置接口IP地址 R2 R4 站点1基本配置 站点2基本配置 通过静态路由在CE和…

【SPSS】两独立样本的极端反应检验和两配对样本的非参数检验详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

链式二叉树的查找,遍历(递归实现)等接口的实现

目录 前言: 一:二叉树的建立 (1)本文采用的二叉树表示方法 (2)手动建立一颗二叉树 二:二叉树的遍历 (1)二叉树的三种遍历方式 (2)分治思想 (3)前序遍历 (4)中序遍历 (5)后序遍历 三:求二叉树的节点和高度(深度) (1)求二叉树节点 ①…

python+vue 餐饮食品安全监管投诉平台

系统主要包括个人中心、用户管理、餐饮类型管理、餐饮企业管理、案例类型管理、案例展示管理、法规分类管理、法律法规管理、在线投诉管理、查处信息管理、系统管理等功能模块。 绪论 网站的开发背景,意义和系统状况等,详细讲述了系统的用处,…