【Redis】Redis是什么、能干什么、主要功能和工作原理的详细讲解

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。
🏀系列专栏:陈童学的日记
💡其他专栏:C++STL,感兴趣的小伙伴可以看看。
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝 ​
⛱️万物从心起,心动则万物动🏄‍♂️


前言:Redis是一种开源的内存数据结构存储系统,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。它可以用作数据库、缓存和消息中间件,并在性能、可扩展性和灵活性方面表现出色。

Redis的简介

Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。它遵守BSD协议,使用ANSI C语言编写,并支持网络和持久化。Redis拥有极高的性能,每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数据类型,包括String、Hash、List、Set和Ordered Set,并且所有的操作都是原子性的。此外,Redis还提供了多种特性,如发布/订阅、通知、key过期等。Redis采用自己实现的分离器来实现高速的读写操作,效率非常高。Redis是一个简单、高效、分布式、基于内存的缓存工具,通过网络连接提供Key-Value式的缓存服务。

Redis可以通过配置文件设置密码参数,这样客户端连接到Redis服务就需要密码验证,从而提高Redis服务的安全性。

Redis有三个主要特点,使它优越于其他键值数据存储系统:

  • 首先,Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化。这使得Redis具有很高的读写性能。
  • 其次,Redis支持多种数据结构,不仅仅支持简单的key-value类型的数据,还提供了list、set、zset和hash等更复杂的数据结构的存储。
  • 最后,Redis支持数据的备份,可以通过master-slave模式进行数据备份,增加了数据的可靠性和安全性。

Redis还可以用于内存存储和持久化,支持异步将内存中的数据写到硬盘上,同时不影响继续服务取最新N个数据的操作。此外,Redis还可以用于模拟类似于HttpSession这种需要设定过期时间的功能,发布和订阅消息系统,以及定时器和计数器等功能。

Redis的由来

在这里插入图片描述

Redis是一个开源的高性能键值对存储系统,它最早由Salvatore Sanfilippo编写并在2009年发布。Redis的名字来源于Remote Dictionary Server(远程字典服务器)的缩写。Redis最初是为了解决Web应用中的高并发读写问题而设计的。它具有以下特点:单线程的模型,支持多种数据结构,以及快速的读写速度。

Redis的单线程模型意味着它在任何给定的时间只处理一条命令,这样可以避免了多线程之间的线程同步和竞争条件问题。但是,Redis通过使用异步I/O和事件驱动模型来提高并发读写的能力,从而实现了高性能的读写操作。

Redis支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等。每种数据结构都有对应的操作命令,可以对数据进行增删改查等操作。Redis的数据结构灵活,可以满足不同场景下的需求。

在Redis中,数据的存储方式会根据数据的特性进行优化。例如,对于少量和小型的数据,Redis使用小而压缩的存储方式来提高存储效率。此外,Redis还通过使用编码属性来设置对象的内部编码,以进一步优化存储和执行效率。

Redis的底层存储结构主要依赖于字典,也称为散列表(hash)。字典是一种键值对的存储结构,用于在内存中快速查找和访问数据。整个Redis数据库就是通过字典来存储数据的,每个键值对都被存储在字典中。因此,在对Redis进行CURD操作时,实际上是对字典中的数据进行操作。

总的来说,Redis是一个高性能的键值对存储系统,它具有单线程的模型、支持多种数据结构和快速的读写速度。Redis最初是为了解决Web应用中的高并发读写问题而设计的。在Redis中,数据的存储方式根据数据的特性进行优化,底层存储结构主要依赖于字典。

在这里插入图片描述

Redis主要特性和功能

Redis能够做很多事情,它提供了多种语言的API,并且支持网络访问。Redis具有以下几个主要的特性和功能:

  • 1.内存存储:Redis主要将数据存储在内存中,因此具有非常高的读写性能。它适用于对响应速度要求较高的应用场景,比如缓存系统。

  • 2.持久化:Redis支持将数据持久化到硬盘上,以防止数据丢失。它提供了两种持久化方式:RDB(Redis Database)和AOF(Append Only File)。RDB是将数据定期保存到磁盘文件中,而AOF则是将每个写操作追加到文件的末尾。

  • 3.发布订阅系统:Redis提供了发布订阅(Pub/Sub)机制,可以用于实现消息队列、实时聊天等功能。通过订阅感兴趣的频道,客户端可以接收到相应的消息。

  • 4.地图信息分析:Redis提供了地理位置相关的数据结构和命令,可以用于存储和查询地理位置信息。这使得它在地图信息分析方面具有很大的优势。

  • 5.计时器和计数器:Redis提供了丰富的命令,可以用于实现计时器和计数器功能,比如记录用户的浏览量、点赞次数等。

  • 6.分布式锁:Redis的setnx命令可以用于实现分布式锁。在分布式应用中,为了保证同一时刻只有一个线程执行关键代码,可以使用Redis的分布式锁功能来实现。

  • 7.实时数据分析:由于Redis具有高性能和低延迟的特点,适合用于实时数据分析。可以将实时产生的数据存储在Redis中,并通过Redis提供的相关命令进行实时的数据查询和统计分析。

总之,Redis是一个功能强大且灵活的数据库,可以根据不同的需求来使用,它可以用于内存存储、持久化、发布订阅系统、地图信息分析以及计时器和计数器等多种应用场景。简直强的鸭皮呀兄弟们!

Redis的工作原理

Redis的工作原理是基于内存的、单线程的、非阻塞IO的键值存储系统。以下是关于Redis的工作原理:

  • 内存存储:Redis完全基于内存进行数据存储,这使得它具有高速读写的特性。大部分请求都是在内存中进行操作,因此速度非常快。数据存储在内存中,类似于HashMap,使得数据的查找和操作时间复杂度为O(1)。

  • 单线程:Redis采用单线程的方式来处理请求,避免了多线程导致的上下文切换和竞争条件。它不需要考虑各种锁的问题,也不会因为加锁释放锁操作而产生性能消耗。单线程的架构可以有效地提高Redis的性能。

  • 非阻塞IO:Redis使用多路复用IO模型来处理IO操作,实现了非阻塞IO。它通过监听多个socket,一次性接受多个客户端请求,并将请求放入队列中。当完整的命令到达服务端后,再去处理请求,不需要等待客户端的传输。这种方式可以提高Redis的并发处理能力。

  • Lua脚本执行:Redis还支持在Lua脚本中执行Redis命令。通过redis.call(command, key [param1,param2…])的方式,可以在Lua脚本中调用Redis命令进行操作。这使得用户可以灵活地执行复杂的逻辑和操作。

Redis通过将数据存储在内存中,采用单线程和非阻塞IO的方式,实现了高性能的键值存储。它的工作原理简单而高效,适用于各种场景下的数据存储和缓存需求。

在这里插入图片描述

怎么样,在了解Redis后是不是觉得这个东西很强呀?但是也好像合情合理哈,毕竟任何一门被企业主流使用的技术都是实用性比较强且受大众程序员喜爱的(毕竟能更好的摸鱼😏)
在这里插入图片描述


如果本文对大家有所帮助的话,还望各位能给我点赞、收藏并评论一下,感谢各位💕!!! 另如果大家有什么疑问或者建议的话,欢迎评论区留言。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接,但是都是基于Spring webmvc的,Gateway这种非阻塞式的网关是基于webflux的,对于集成Security相关内容略有不同,且涉及到代理其它微服务,所以会稍微比较麻…

Shiro认证框架

目录 概述 认证授权及鉴权 Shiro框架的核心组件 基本流程 spring bootshiromybatisPlus...实现用户登录 step1:准备工作 (1)坐标 (2)连接数据库 (3)JavaBean (4)dao数据访问层 (5)密码工具类 DigestsUtil (6)配置类 step2:认证功能 step3:授权鉴权 概述…

Arcgis colorRmap

arcgis中colorRmap对应的名称: 信息来源:https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 在arcpy中使用方法: import arcpy cr arcpy.mp.ColorRamp("Yellow to Red")python中 ma…

基于安卓的考研助手系统app 微信小程序

,设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。HBuilder技术作为当前最流行的操作平台,自然也存在着大量的应用服务需求。 本课题研究的是基于HBuilder技术平台的安卓的考研助手APP,开发这款安卓的考研助手APP主要是为了…

下一代存储解决方案:湖仓一体

文章首发地址 湖仓一体是将数据湖和数据仓库相结合的一种数据架构,它可以同时满足大数据存储和传统数据仓库的需求。具体来说,湖仓一体可以实现以下几个方面的功能: 数据集成: 湖仓一体可以集成多个数据源,包括结构…

TCP学习笔记

最近面试,问TCP被问住了,感觉背八股背了印象不深刻,还是总结一些比较好。 如果有写错的,欢迎批评指正。 参考:https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8…

qt在线包下载安装出错 无法检索远程树

我的问题好像是在安装Qt5.15.2出现的。 我的情况是由于网络问题问题,设置开启了本机的代理之后,就可以正常下载了。

Java小游戏

一、需求 二、思路一 HP当然是怪物的一个属性成员,而武器是角色的一个属性成员,类型可以使字符串,用于描述目前角色所装备的武器。角色类有一个攻击方法,以被攻击怪物为参数,当实施一次攻击时,攻击方法被调…

C++设计模式之适配器模式

一、适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成另一个类所期望的接口,以便两个类能够协同工作。 适配器模式可以解决现有类接口与所需接口不匹配的问题,使得原本因接口不…

BlazorServer中C#与JavaScript的相互调用

BlazorServer中C#与JavaScript的相互调用 前言: ​ 虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写,但当需要使用第三方的javascript文件/组件里的内容时,则难免要在C#中调用其方法或对象。反之当你的(用到第…

湖北咸宁农业三维扫描数字化农业3d打印制造应用-CASAIM中科广电

农业是人类衣食之源、生存之本,是一切生产的首要条件,CASAIM在农业三维扫描和3d打印应用上有丰富经验。 1.三维扫描技术在农业领域的应用 CASAIM三维扫描是集光学、机电和计算机技术于一体的高新无损检测技术,能够对实物的空间外形、结构乃…

Redis数据结构全解析【万字详解】

文章目录 前言一、SDS1、SDS的必要性2、SDS的数据结构3、SDS的优势O(1)复杂度获取字符串长度二进制安全不会发生缓冲区溢出节省空间 二、链表1、结构设计2、优缺点 三、压缩列表1、结构设计2、连续更新3、压缩列表的缺陷 四、哈希表1、结构设计2、哈希冲…

ubuntu安装goland

下载并解压goland sudo tar -C /opt/ -xzvf goland-2023.1.3.tar.gz配置应用图标 新建文件: vim /usr/share/applications/goland.desktop文件中写入如下内容: [Desktop Entry] TypeApplication NameGoLand Icon/opt/GoLand/bin/goland.png Exec/op…

科技赋能,教育革新——大步迈向体育强国梦

在 "全民健身"、"体育强国建设"战略的推进下,体育考试成绩被纳入重要升学考试且分值不断提高,体育科目的地位逐步上升到前所未有的高度,在此趋势下,体育教学正演变出更多元化、个性化的需求。然而现实中却面临…

centos7安装MySQL8

Centos7安装MySQL8 MySQL版本:8.0.34 1.安装前准备 (1)查看是否安装mariadb [rootkb135 ~]# rpm -qa|grep mariadb (2)卸载mariadb并检查是否卸干净 [rootkb135 ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x8…

【C语言】2023.8.27C语言入学考试复盘总结

前言 本篇文章记录的是对于2023年8月27日的 C语言 的入学考试的整理总结 成绩:220/240 题目:9/12 错题整理 首先先对于我没做出来的三道题做一个整理 错题1:7-4 分段函数PLUS 题干 以下是一个二元分段函数,请你根据所给的函…

SketchBook软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 SketchBook是一款由Autodesk公司开发的绘画和绘图软件,它适用于各种操作系统和平台,如Windows、macOS、iOS和Android等。 SketchBook是一款专业的绘图软件,旨在满足各种绘画和绘图需求。它提…

TensorBoard的使用

TensorBoard:对图像进行变换 1. SummaryWriter的使用 ctrl类出现注释解析: 将条目直接log_dir写入要成为由TensorBoard使用。 “摘要编写器”类提供了一个高级 API 来创建事件文件,并在给定目录中添加摘要和事件。该类更新文件内容异步。…

如何配置一个永久固定的公网TCP地址来SSH远程树莓派?

文章目录 如何配置一个永久固定的公网TCP地址来SSH远程树莓派?前置条件命令行使用举例:修改cpolar配置文件 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 …

【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER

文章目录 前言PATH_REUSE_DECIDER功能简介PATH_REUSE_DECIDER相关配置PATH_REUSE_DECIDER总体流程PATH_REUSE_DECIDER相关子函数IsCollisionFreeTrimHistoryPathIsIgnoredBlockingObstacle和GetBlockingObstacleS Else参考 前言 在Apollo星火计划学习笔记——Apollo路径规划算…