[Redis][Redis简介]详细讲解

目录

  • 1.认识 Redis
  • 2.Redis 特性
    • 1.速度快
    • 2.基于键值对的数据结构的服务器
    • 3.丰富的功能
    • 4.简单稳定
    • 5.客户端语言多
    • 6.高扩展性
    • 7.持久化(Persistence)
    • 8.主从复制
    • 9.⾼可⽤和分布式
  • 3.Redis 使用场景
    • 1.数据库
    • 2.Cache
    • 3.消息队列
  • 4.注意


1.认识 Redis

  • Redis是⼀种基于键值对(Key-Value)的NoSQL数据库
  • Redis会将所有数据都存放在内存中,所以它的读写性能⾮常惊⼈
  • 与很多键值对数据库不同的是,Redis 中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLogGEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景
  • Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”

2.Redis 特性

1.速度快

  • Redis的所有数据都是存放在内存中的,比访问硬盘的数据库要快得多
    • MySQL主要是通过""的方式来存储组织数据的"关系型数据库"
    • Redis主要是通过"键值对"的方式来存储组织数据的"非关系型数据库"
  • Redis核心功能都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构
  • Redis使⽤了单线程,预防了多线程可能产⽣的竞争问题
    • Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令
    • 即命令的执⾏仍然采⽤了单线程模式
  • 从网络角度上,Redis使用了IO多路复用的方式(epoll)

2.基于键值对的数据结构的服务器

  • 与很多键值对数据库不同的是, Redis中的值(Value)不仅可以是字符串,⽽且还可以是具体的数据结构,这样不仅能便于在许多应⽤场景的开发,同时也能提⾼开发效率
  • Redis的全程是Remote Dictionary Server,它主要提供了5种数据结构:字符串(string)、哈希)、列表(list)、集合(set)、有序集合(orderedset/zset),同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2.版本种加⼊有关GEO(地理信息定位)的功能
  • 总结:Key都是stringValue可以是上述的这些数据结构

3.丰富的功能

  • 提供了键过期功能,可以⽤来实现缓存
  • 提供了发布订阅功能,可以⽤来实现消息系统
  • ⽀持Lua脚本功能,可以利⽤Lua创造出新的Redis命令
    • 针对Redis的操作,可以直接通过简单的交互式命令进行操作
    • 也可以通过脚本的方式,批量执行一些操作(带有逻辑)
  • 提供了简单的事务功能,能在⼀定程度上保证事务特性
  • 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到Redis,减少了⽹络的开销

4.简单稳定

  • Redis的源码很少,早期版本的代码只有2万⾏左右, 3.0版本以后由于添加了集群特性,代码增⾄5万⾏左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维⼈员完全可以“吃透”它
  • Redis使⽤单线程模型, 这样不仅使得Redis服务端处理模型变得简单,⽽且也使得客⼾端开发变得简单
  • Redis不需要依赖于操作系统中的类库,Redis⾃⼰实现了事件处理的相关功能
  • 与简单相对的是Redis具备相当的稳定性,在⼤量使⽤过程中,很少出现因为Redis⾃⾝BUG⽽导致宕掉的情况

5.客户端语言多

  • Redis提供了简单的TCP通信协议,很多编程语⾔可以很⽅便地接⼊到Redis,并且由于Redis受到社区和各⼤公司的⼴泛认可,所以⽀持Redis的客⼾端语⾔也⾮常多,⼏乎涵盖了主流的编程语⾔,例如:C、C++、Java、PHP、Python、NodeJS等

6.高扩展性

  • 可用C、C++、Rust编写Redis拓展 --> 本质上是动态链接库
  • 自己扩展Redis功能,可以让其支持更多的数据结构以及更多的明林

7.持久化(Persistence)

  • 将数据放在内存中是不安全的,⼀旦发⽣断电或者机器故障,重要的数据可能就会丢失

  • Redis提供了两种持久化⽅式:RDB和AOF,可以⽤两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性
    请添加图片描述

  • 内存为主,硬盘为辅,硬盘相当于对内存的数据备份了一下


8.主从复制

  • Redis提供了复制功能,实现了多个相同数据的Redis副本(Replica)
    • 复制功能是分布式Redis的基础
      请添加图片描述

9.⾼可⽤和分布式

  • Redis提供了⾼可⽤实现的Redis哨兵(Redis Sentinel),能够保证Redis结点的故障发现和故障⾃动转移
  • 也提供了Redis集群(Redis Cluster),是真正的分布式实现,提供了⾼可⽤、读写和容量的扩展性

3.Redis 使用场景

1.数据库

  • 大多数情况下,考虑到数据存储,优先考虑的是"大"
  • 但也有少数情况,考虑的是"快"
  • 因为Redis将数据存储在内存中,所以Redis作为数据库是非常快的

2.Cache

  • 二八原则,把热点数据拎出来,存储在Redis中
    • Redis存的是部分数据,全量数据以MySQL为主
  • 缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能 够有效地降低后端数据源的压⼒
  • Redis提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略

3.消息队列

  • 消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性
  • Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是 对于⼀般的消息队列功能基本可以满⾜
  • 如果当前场景中,对于消息队列的功能依赖的不是很多,并且又不想引入额外的依赖了,Redis可以考虑作为一个选择

4.注意

  • Redis的字符串,不会对字符串编码做任何处理
    • Redis不认识字符,只认识字节
  • 在启动Redis客户端的时候,加上一个--raw选项,就可以使Redis客户端能够自动的把二进制数据尝试翻译

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

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

相关文章

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ OpenHarmony(鸿蒙南向开发)——轻量系统STM32F407芯片移植案…

PyQt5-QCheckBox-开关按钮

效果预览 实现代码 from PyQt5.QtWidgets import QCheckBox, QApplication, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve, pyqtProperty from PyQt5.QtGui import QPainter, QColor, QPen, QFontclass CompactSwitchCheckbox…

《Google软件测试之道》笔记

介绍 GTAC:Google Test Automation Conference,Google测试自动化大会。 本书出版之前还有一本《微软测试之道》,值得阅读。 质量不是被测试出来的,但未经测试也不可能开发出有质量的软件。质量是开发过程的问题,而不…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具,为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能:风险规避、价格发现和资产配置。 第一,风险规避功能 1.套期保值:股指期货的风险规避功能主要通过套期保值…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 容器Row(行) & Column(列)RelativeContainer(相对布局容器)marginpaddingSwiper(轮播图)Grid(网格容器)List(列表) 组件Image…

Java入门程序-HelloWorld

Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文,首字母大写,满足驼峰命名法,源代码文件的后缀必须是.java 开发HelloWorld程序 &…

MATLAB十九种作图大全

一、二维曲线图 反应两个变量的因果关系 clear; %清除工作空间的所有变量 clc; %清除命令窗口的内容,对工作环境中的全部变量无任何影响 close all; %关闭所有的Figure窗口 x linspace(1,200,100); %均匀…

进程监控与管理详解

一、进程的定义: 进程process是正在运行的程序,包括: 分配的内存地址空间 安全属性、包括所有权和特权 一个或多个线程 进程状态 进程的环境包括: 本地和全局变量 当前调度上下文…

Mac清理其他文件:释放存储空间的高效指南

每个Mac用户都可能遇到存储空间不足的问题,尤其是当“其他”文件积累到一定体积时。在Mac上,“其他”文件通常包括各种系统文件、缓存、文档以及不被归类为应用程序、照片、电影或音乐的其他类型的文件。这些文件往往不易被注意,但逐渐占用了…

数组学习内容

动态初始化 只给长度,数据类型【】 数组名new 数据类型【数组长度】 内存图

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题(160) Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全方法一:方法二: 开发环境: vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 方法一: 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全, 将C_CPP插…

基于python+django+vue的农业管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…

57.【C语言】字符函数和字符串函数(strerror函数)

目录 11.strerror函数 *简单使用 *错误码打印 *实际的用法 *附:VS中errno.h对错误码的分类 11.strerror函数 *简单使用 strerror string error cpuscplus的介绍 点我跳转 翻译: 函数 strerror char * strerror ( int errnum ); 得到指向错误信息字符串(简称错误码)的指针…

配置环境-keil

配置keil -- 先将keil安装配置好,包括库 一、STM32 -- STM32是意法半导体(意大利)采用ARM公司设计的内核,设计一系列32位单片机芯片。 1、STM32开发的几种方式 2、STM32寄存器和库函数版本的工程创建 新建文件夹 复制相关文件…

web基础之RCE

简介:RCE称为远程代码执行漏洞;是互联网的一种安全漏洞;攻击者可以直接向后台服务器远程注入操作系统命令;从而操控后台系统;也是CTF比较常考的一个方面 1、eval执行 (1)分析后端代码&#xf…

Redis学习——数据不一致怎么办?更新缓存失败了又怎么办?

文章目录 引言正文读写缓存的数据一致性只读缓存的数据一致性删除和修改数据不一致问题操作执行失败导致数据不一致解决办法 多线程访问导致数据不一致问题总结 总结参考信息 引言 最近面试快手的时候被问到了缓存不一致怎么解决?一开始还是很懵的,因为…

线性代数之QR分解和SVD分解

文章目录 1.QR分解Schmidt正交化Householder变换QR分解的应用 2. 求矩阵特征值、特征向量的基本方法3.SVD分解SVD分解的应用 参考文献 1.QR分解 矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵R的乘积的形式。 任意实数方阵A&#xff0c…

从用户数据到区块链:Facebook如何利用去中心化技术

在数字化时代,用户数据的管理和保护已成为科技公司面临的重大挑战。作为全球最大的社交网络平台之一,Facebook不仅在用户数据的处理上积累了丰富的经验,也在探索如何利用去中心化技术,如区块链,来改进其数据管理和用户…

健身房预约小程序定制搭建,数字化运营管理

目前,健身已经成为了大众日常生活中不可或缺的一部分,不管是健身跑步、打羽毛球等,都受到了大众的欢迎!随着健身行业的快速发展,为了提高大众的健身体验,健身房预约系统得到了广泛发展。预约系统不仅解决了…