初识redis

news2024/11/24 0:56:09

1.初识Redis

Redis是一种键值型的NoSql数据库,这里有两个关键字:

  • 键值型

  • NoSql

其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:
在这里插入图片描述

而NoSql则是相对于传统关系型数据库而言,有很大差异的一种数据库。

1.1.认识NoSQL

NoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库

1.1.1.结构化与非结构化

🏏传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束:
🏑并且在程序上线很久以后,数据库的表机构几乎成为不可修改的存在,如果要修改的话,要牵动的结构会非常多。
这个算是结构型数据库的短处。

🏒而NoSql则对数据库格式没有严格约束,往往形式松散,自由。可以是键值型,也可以是文档型,甚至可以是图格式。

1.1.2.关联和非关联

🥍传统数据库的表与表之间往往存在关联,例如外键。
🏓而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合:

{
  id: 1,
  name: "张三",
  orders: [
    {
       id: 1,
       item: {
	 id: 10, title: "荣耀6", price: 4999
       }
    },
    {
       id: 2,
       item: {
	 id: 20, title: "小米11", price: 3999
       }
    }
  ]
}

此处要维护“张三”的订单与商品“荣耀”和“小米11”的关系,不得不冗余的将这两个商品保存在张三的订单文档中,不够优雅。还是建议用业务来维护关联关系。

1.1.3.查询方式

🏸传统关系型数据库会基于Sql语句做查询,语法有统一标准;

🥊而不同的非关系数据库查询语法差异极大,五花八门各种各样。
在这里插入图片描述

1.1.4.事务

每日一记:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
🥋传统关系型数据库能满足事务ACID的原则。
🥅而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。

1.1.5.总结

除了上述四点以外,在存储方式、扩展性、查询性能上关系型与非关系型也都有着显著差异,总结如下:
在这里插入图片描述

😩其中base意味非关系数据库可以完成基础的事务,或者就不能完成事务
😫关系型数据库在设计之初就没有考虑到分布式的需求,所以我们在存储数据到关系型数据库的时候,其实都是存在于本机,影响数据库性能的其实就是本机的性能,而非关系型数据库,在设计之初就考虑到了数据拆分的需求,因此他们在插入数据的时候都会基于这个数据的id或者是唯一的标识做一个哈希运算,根据哈希运算的结果去判断这个数据去存储到哪一个结点上,从而实现数据的拆分。因此nosql在扩展的时候非常轻松实现。

  • 存储方式
    • 关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
    • 非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些
  • 扩展性
    • 关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展。
    • 非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展。
    • 关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦

💆🛌🖥️🎮🕹️⚔️🤡

1.2.认识Redis

Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数据库。

特征

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化(持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存),其实就是redis会定期将数据存到磁盘)
  • 支持主从集群(从节点可以备份主节点的数据,这样子主节点宕机,数据可以从从节点中找到,主从可以做读写分离,从而大大提高查询效率)、分片集群(就是将数据拆分,存储的上限大大提高)
  • 支持多语言客户端

作者:Antirez

Redis的官方网站地址:https://redis.io/
为什么redis单线程但是性能却那么好

  1. 😟因为数据是写在内存的
  2. 👺IO多路复用

什么是IO多路复用
一句话解释:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。
应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标的输入、中断信号等等事件,再比如web服务器如nginx,需要同时处理来来自N个客户端的事件。
逻辑控制流在时间上的重叠叫做 并发
而CPU单核在同一时刻只能做一件事情,一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片,不同事件流的时间片交替进行)。在计算机系统中,我们用线程或者进程来表示一条执行流,通过不同的线程或进程在操作系统内部的调度,来做到对CPU处理的时分复用。这样多个事件流就可以并发进行,不需要一个等待另一个太久,在用户看起来他们似乎就是并行在做一样。
但凡事都是有成本的。线程/进程也一样,有这么几个方面:
线程/进程创建成本
CPU切换不同线程/进程成本 Context Switch
多线程的资源竞争
有没有一种可以在单线程/进程中处理多个事件流的方法呢?一种答案就是IO多路复用。
因此IO多路复用解决的本质问题是在用更少的资源完成更多的事。

  1. 👻良好的编码

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

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

相关文章

HTTPS一定可靠吗?

HTTPS一定可靠吗?中间人伪装服务器首先我们先看看客户端是如何验证证书的?数字证书签发和验证流程客户端校验服务端数字证书的过程如何出现中间人伪装服务器成服务器的情况?避免该情况中间人伪装服务器 客户端向服务端发起HTTPS建立连接请求时…

你知道吗?python lxml 库也能用于操作 svg 图片

在大多数场景中,我们都用 lxml 库解析网页源码,但你是否知道,lxml 库也是可以操作 svg 图片的。我们可以使用 lxml 中的 etree 模块来解析 SVG 文件,然后使用 SVG 中的各种元素和属性来进行操作。 python lxml 库操作 svg 图片lxm…

传输层协议:TCP协议(上)——协议结构、主要特点以及应用场景

简介 传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传…

xubuntu系统偶发自动登出

项目场景: 系统:xubuntu-16.04.3-desktop 问题描述 使用xubuntu系统期间,在root用户下进行相关开发,突然系统会回到普通用户登录界面,需要输入密码进入到普通用户下   它会终止所有打开的应用程序和进程&#xff0…

【Vue组件通信方式】

文章目录前言一、父子组件通信1、父传子①使用props接收父组件传递的属性② 使用$attrs接收父组件未在 props 和 emits 中定义的属性和事件③使用 $parent获取父组件的信息2、子传父① 使用 $emit传递信息给父组件② 使用$refs获取子组件的属性和事件二、自定义事件&#xff1a…

独家丨DeepMind科学家、AlphaTensor一作解读背后的故事与实现细节

一直以来,DeepMind的Alpha系列工作,AlphaGo、AlphaStar等致力于棋类和游戏应用中战胜人类,而两个月前发布的AlphaTensor则把目标指向了科学计算领域,意在为矩阵乘法等基本计算任务自动设计更高效的经典算法,这一工作一…

Burpsuite超详细安装教程(附安装包)

写在开头 Burp Suite 是用于攻击web 应用程序的集成平台,包含了许多工具。Burp Suite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。 接下来我来…

软件测试面试经 | 双非院校,从外包到外企涨薪85%,他的涨薪秘籍全公开

本文为霍格沃兹测试开发学社优秀学员跳槽笔记,测试开发进阶学习文末加群。 本身是一所不入流的院校毕业的一名建工类专业的瓜娃子,至今记得当初是因为找工作被培训公司忽悠才加入到这个行业的,抱着做着试试的想法这一干在深圳就是6年&#xf…

excel替换技巧:如何将手机号码的部分数字变成星号

每个销售员经常会接触大量客户,会用小本本记下众多客户的信息,而手机号码就是其中重要的一项。为了保护客户隐私,在公开的信息里销售员需要把客户手机号码的部分数字变成星号。比如说,把客户A的手机号码15867852976修改成158****2…

SpringMvc源码分析(三) 请求执行过程之获取MethodHandler

1.请求是如何关联到DispatcherServlet的 DispatcherServlet是Servlet的实现,遵循Servlet生命周期的规则。 Servlet的生命周期即其出生到死亡的过程中分别会调用Servlet里的以下方法: 加载和实例化:可以参考SpringMvc源码分析一 init方法…

【JavaEE】博客前端

目录 一、列表页 1.1导航条 1.2主题区域 1.2.1个人信息框 1.2.2 内容区 二、登录页 三、详情页 一、列表页 整体布局如下: 1.1导航条 导航条分为三块,整体都设置id为导航栏,然后左右分为导航栏左和导航栏右。左边靠左,右边靠…

计算机视觉Computer Vision课程学习笔记四之Region and Edge Descriptions

第四章讲了区域和边界的描述 包括最佳区域评估方法,多物体识别,标签算法,斑点标记 以及矩评估的方法和优劣 Region Description Simple measurements on binary images • Use for recognition, etc. • Generate region descriptions whic…

Win10+CMake+VS2017编译OpenCV4.5.5

第一步:准备工作1 下载opencv4.5.5下载OpenCV4.5.5,并解压到自己新建文件夹opencv下。2 下载opencv_contrib4.5.5下载opencv_contrib4.5.5,解压到上面的opencv文件夹中,并在opencv文件夹中新建一个build文件夹,用来存放…

第一天总结 之 用户管理界面的实现 之 添加操作 的实现

添加操作的实现 明确页面的跳转 找到 admin_adduser.jsp中 form表单 前端的添加页面展示 在表单中输入 信息 点击注册跳转到 from表单对应的 action地址 UserAddServlet 创建UserAddServlet 从前端的form表单中获取值 然后在service层 进行 业务操作 即将这些属性存放在 Ob…

私有部署与SaaS模式网站有什么区别

什么是SaaS SaaS 是 Software-as-a-Service 的简称,它是一种通过互联网提供软件的模式。 以官网为例,SaaS订阅的网站通常统一部署在SaaS提供商的云服务器上。用户通过自己的实际需求订购对应的网站系统服务,按订购的系统功能、使用流量/存储…

Word处理控件Aspose.Words功能演示:用Java从Word文档中提取文本

Aspose.Words For .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外,API支持所有流行的Word…

凭记忆错题记录-

3、某种部件用在2000合计算机系统中,运行工作1000小时后,其中有4台计算机的这种部件失效,则该部件的千小时可靠性度R为()。 A.0.990 B.0.992 C.0.996 D.0.998 【参考答案】D  8、9、X509数字证书标准推荐使用的密码算法是(8),而…

计算机视觉Computer Vision课程学习笔记八之Recognition识别 low level

第八章讲了全局图像识别的方法 距离 空间特征 简单的分类模型 Recognition (low level / global matching) Task – from a description of the image in terms of “good” features (not just blobs) extract a meaning • Detect • Classify • Etc. • Techniques – Te…

C++动态规划超详细总结

动态规划首先来介绍一下动态规划,但我不想用过于官方的语言来介绍。动态规划是一种思想,它常用于最优解问题(即所有问题包括所有子问题的解为最优解),它有点像递推,是在已知问题的基础上解决其他问题。这种…

【openWrt】安装后进行定制

修改openWrt管理后台默认端口vim /etc/config/uhttpd修改如下图内容然后重启uhttpd服务即可生效etc/init.d/uhttpd restart修改openWrt软件包源可以在openwrt后台改也可以在/etc/opkg/distfeeds.conf直接改vim /etc/opkg/distfeeds.conf配置如下src/gz handsomemod_core https:…