【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用

news2024/9/23 21:30:56

文章目录

  • 认识redis
  • redis的主要特点
  • redis的特性(优点)
  • redis是单线程模型,为什么效率这么高,访问速度这么快
  • redis应用场景
  • redis不可以做什么
  • MySQL和Redis对比
  • 启动Redis
  • Redis客户端
  • Redis重要文件及作用

认识redis

redis里面相关的小命令 fulshall:清空redis数据库,类似于mysql里面的drop database;

  • 一. 内存中存储数据(内存级数据库)

  • redis相比MySQL的优势:MySQL数据库最大的问题在于访问速度是比较慢的(很多互联网产品中,对于性能要求是很高的)。redis作为数据库使用,定性的角度来看是很快的,但是很难定量去衡量。

  • redis相比MySql的劣势:存储空间是有限的(内存的空间毕竟是少的)。

    • 虽然有不少互联网产品,对于性能的要求是比较高的。更多的互联网产品对于性能的要求没那么高。
    • 所以要设计又大又快的数据库:典型的方案是,可以把redis和mysql结合起来使用(“二八原则”,20%的热点数据,能满足80%的访问需要)。虽然结合起来使用使得系统的复杂度程度大大提升了。而且,如果数据发生修改,还涉及到redis和mysql之间的数据同步的问题。
  • 二. cache

    • 速度快。可能会有人问:定义变量,不就是在内存中存储数据吗? => redis是在分布式系统中,才能发挥威力的~~如果只是单机程序,直接通过变量存储数据的方式,确实是比使用redis更优的选择。
    • 为什么在分布式系统中会更有优势的呢?
      不同的主机之间的通信,其实还是不同的进程之间的通信。又因为进程之间具有隔离性(利用网络),redis就是基于网络的,可以把自己内存中的变量给别的进程,甚至别的主机的进程进行使用
  • 三. redis的初心

    • 最初就是用来作为一个“消息中间件”的(消息队列)。分布式系统下的生产者消费者模型。当前很少会直接使用redis作为消息中间件(业界有更多更专业的消息中间件使用)。

Redis(Remote Dictionary Server)是一个基于客户端-服务器架构存储数据的中间件。它是一种内存数据库,属于NoSQL(非关系型数据库)的一种,可用于作为数据库缓存/会话存储消息队列。它通常被用作中间缓存层,将频繁访问的数据存储在内存中,从而大幅提升读取性能。上文所说的主从分离/冷热分离架构中的缓存服务器就可以用Redis来实现,以提高热点数据的读取性能


redis的主要特点

1.键值存储:Redis使用简单的键值对**(K-V)数据模型**。每个键都与一个唯一的值相关联,通过键可以快速访问和操作对应的值。

2.内存存储:Redis将数据保存在内存中,以实现高速的读写操作(还引入了IO多路复用,一个线程管理多个socket)。这使得Redis能够实现非常低延迟和高吞吐量的数据访问

3.可编程的:可直接通过简单的交互式命令进行操作,也可通过脚本的方式,批量执行操作

4.可扩展:Redis提供了一组API,在原有的功能上进行扩展(以支持更多的数据结构,命令),通过几个语言编写Redis扩展,本质上是一个动态链接库(windows:dll Linux:.so)

5.持久化与备份:提供持久化功能,将数据写入磁盘或其他持久存储介质。此外,一些RDS还支持数据备份和恢复功能,以防止数据丢失

  • Redis提供了两种持久化⽅式:RDB和AOF,即可以⽤两种策略将内存的数据保存到硬盘中
image-20231020195021281

6.支持集群:支持水平扩展(类似于分库分表),将数据分片到多个节点上,以提高存储和处理能力

7.高可用性:Redis支持主从复制(Master-Slave Replication)和哨兵(Sentinel)机制,以提供数据的高可用性和容错能力。通过配置主从复制和哨兵节点,Redis可以实现自动故障恢复和故障转移


redis的特性(优点)

1.通过数据结构在内存当中存储数据

  • MySQL主要是通过 的方式来存储组织数据的,它是关系型数据库
  • Redis主要是通过键值对的方式来存储组织数据的,它是非关系型数据库

2.可编程的

  • 针对redis的操作,可以直接通过简单的交互式命令来操作,也可以通过一些脚本的方式执行一些操作

3.可拓展性

  • Redis提供了一组api,可以在redis原有的功能基础上再进行拓展,比如:redis本身已经提供了很多数据结构和命令,但是通过拓展,可以让redis支持更多的数据结构和命令

4.持久化

  • 因为redis为了快速访问是把数据存储到内存上的,然而内存的数据是比较容易丢失的,进程退出/系统重启,都可能会导致内存数据丢失,但是Redis还会把数据存储到硬盘上,硬盘相当于对内存当中的数据备份了一下,如果redis重启了,就会在重启的时候加载硬盘当中的备份数据,使redis的内存数据恢复到重启前的状态
  • 但是主要的CRUD操作还是在内存当中进行的,为的是保证访问速度

5.集群

  • redis作为一个分布式系统的中间件,一个redis能存储的数据使有限的,因为内存的空间是有限的,引入多个主机,部署多个redis节点,每个redis存储数据的一部分

6.高可用 => 冗余 / 备份

  • redis自身也是支持 主从结构的,从节点相当于是主节点的备份

redis是单线程模型,为什么效率这么高,访问速度这么快

1.因为redis数据存储到内存当中,就比访问硬盘的数据库要快很多

2.redis的核心功能都是比较简单的逻辑,都是比较简单的操作内存的数据结构,并且redis是单线程模型,避免了不必要的线程竞争开销

3.从网络角度上,处理网络IO的时候,redis使用了IO多路复用的方式(epoll),使用一个线程管理很多个socket

4.使⽤了单线程,预防了多线程可能产⽣的竞争问题,减少了不必要的线程之间的竞争开销

  • Redis在6.0版本引⼊了多线程机制,但主要也是在处理⽹络和IO,不涉及到数据命令,即命令的执⾏仍然采⽤了单线程模式
  • 多线程提高效率的前提是CPU密集型的任务,此时使用多个线程可以充分的利用CPU多核资源

5.redis是使用C语言实现的,距离”操作系统更近,执⾏速度相对会更快 【但是MySQL也是用C语言实现的,但是MySQL比redis慢,在同样都是C语言实现的前提下,很难说是因为redis基于C语言实现的所以redis执行速度更快】


redis应用场景

1.实时的数据存储(Real-time data store),可以将 Redis 当作数据库。适用于对性能要求高的业务场景

  • 大多数情况,考虑到数据存储,有限考虑的是存储空间足够大,但是有一些场景考虑的是,如果把redis作为数据库,那么此时redis存储的是全量数据,数据不能随便丢失

2.作为缓存/会话存储(Caching & session storage),MySql存储数据空间大,但是读取速度慢,满足不了缓存的要求,所以可以将热点数据放到redis当中

  • 此时redis存储的是部分数据,全量数据以MySQL为主,哪怕redis当中数据没了,仍然可以从MySQL再加载回来

例子:会话存储

会话存储时,使用cookie用来存储用户信息的身份标识(sessionId) => 存储在浏览器这边的身份标识,但是还需要session配合 => 存储在应用服务器当中的

如果在应用服务器当中保存会话信息

image-20231024220326223

此时导致的问题:当客户端通过负载均衡器访问到服务器,进行登录操作,登录成功之后,在服务器当中生成一个session会话信息,但是当客户端再次访问服务器的时候,通过负载均衡器可能会将该请求派发到其它服务器当中,而该服务器可能并没有该用户的会话信息

解决办法:

1.更改负载均衡算法,将同一个用户的请求始终打到同一个机器上

2.将会话数据单独放到一台机器上进行存储,好处是:如果应用程序重启了,会话并不会丢失

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Redis真正存储了用户信息。无论负载均衡器将登录请求分担给哪个应用服务器,都能从Redis中获取到会话

3.消息队列(服务器)(Streaming & messaging),可以实现网络版的生产者-消费者模型(优势:解耦合;削峰填谷)

注意:由于是使用内存来存储数据,不能使用Redis存储大规模数据,考虑使用其它数据库


场景1:排行榜系统

排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统

场景2:计数器应用

计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加1的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择

场景3:社交网络

赞?踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis提供的数据结构可以相对⽐较容易地实现这些功能


redis不可以做什么

站在数据规模的⻆度看,数据可以分为⼤规模数据和⼩规模数据。Redis的数据是存放在内存中的,虽然现在内存已经⾜够便宜,但是如果数据量⾮常⼤,例如每天有⼏亿的⽤⼾⾏为数据,使⽤Redis来存储的话,基本上是个⽆底洞,经济成本相当⾼

  • 因为redis是使用内存来存储数据的,所以redis不能存储大规模数据

站在数据冷热的⻆度,数据分为热数据和冷数据,热数据通常是指需要频繁操作/访问的数据,反之为冷数据。如果将这些冷数据放在Redis上,基本上是对于内存的⼀种浪费,但是对于⼀些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载


MySQL和Redis对比

Redis属于一种NoSQL数据库

1.数据模型

  • MySQL是关系型数据库管理系统(RDBMS),使用表格来组织数据,并使用结构化查询语言(SQL)进行数据操作。数据以行和列的形式存储,且需预定义数据模式和数据类型。
  • NoSQL是非关系型数据库,其数据模型可以是键值对(Key-Value)、文档(Document)、列族(Wide-Column)或图形(Graph)等。NoSQL数据库更加灵活,不需要预定义固定的数据模式

2.拓展性

  • MySQL在水平扩展时存在一些限制,常规部署通常是单机或主从复制架构。虽然可以通过分区和分片等技术来提高性能和可伸缩性,但相对较复杂。
  • NoSQL数据库通常天生具备可伸缩性,易于构建分布式集群,可以通过添加更多节点来水平扩展,以应对大规模数据和高并发访问的需求。

3.强一致性和灵活性

  • MySQL支持强一致性,即保证所有读取操作都能看到最新的写入操作。通过事务和锁机制,确保数据一致性和完整性。
  • NoSQL数据库中的一些类型,如键值对存储,可能会放宽一致性要求以换取更高的性能和可用性。这种弱一致性模型在某些场景下更加适用。

4.查询复杂性

  • MySQL作为关系型数据库,支持SQL语言进行复杂查询,可以执行连接操作、聚合函数和多表关联等。
  • NoSQL数据库的查询方式相对简单,通常使用键值对或类似于JSON的查询语法。它们更适合于数据访问模式简单、数据结构扁平化的场景。

如果需要强大的事务支持、复杂查询和一致性保证,以及已经有现有的SQL架构和工具链,那么MySQL是一个不错的选择。对于大规模数据、高并发和灵活的数据模型,以及更容易进行水平扩展的需求,可以考虑使用NoSQL数据库。也可以在特定场景中将两者结合使用,如使用MySQL作为主数据库,然后使用NoSQL数据库作为辅助或缓存数据库来提升性能。


启动Redis

centos启动redis命令:sudo redis-server /etc/redis/redis.conf

  • ping:与redis服务做心跳测试,服务端正常的话会返回pong

image-20231020194502198

如果想要关闭redis:使用netstat或者ps查询得到redis的服务器的进程id,再进行kill即可

注意:修改了配置文件,需要重启redis才能生效

Ubuntu:

  • 重新启动redis服务器: service redis-server restart
  • 查看redis服务器的状态:service redis-server status

Centos:

通过netstat 或者ps查询redis服务器的进程id,然后再使用kill杀掉该进程


Redis客户端

Redis也是一个基于客户端-服务器(Client-Server)架构的内存数据库,自带的命令行客户端,可通过命令直接启动

redis-cli -h <host> -p <port>

<host> 是Redis服务器的主机名或IP地址,<port> 是Redis服务器监听的端口号。由于当前我们连接的服务器位于127.0.0.1,端口默认使用的是6379,所以可以直接使用redis-cli来启动Redis客户端

image-20231020200231742


注意:redis的“快”是相对于mysql这类关系型数据库的,如果是直接和内存中的操作变量相比就没有优势甚至更慢了

比如针对单机系统,应用程序要存储K-V结构的数据,那么使用redis还是map更好呢?引入redis,一定是比直接使用map更慢的,因为map是直接操作内存,redis是先通过网络再操作内存的


Redis重要文件及作用

/usr/bin/redis-benchmark
/usr/bin/redis-check-aof -> /usr/bin/redis-server
/usr/bin/redis-check-rdb -> /usr/bin/redis-server
/usr/bin/redis-cli		
/usr/bin/redis-sentinel -> /usr/bin/redis-server
/usr/bin/redis-server
/usr/libexec/redis-shutdown

redis-server是Redis服务器程序 , redis-check-aof是修复AOF⽂件⽤的⼯具 ,redis-check-rdb是修复RDB⽂件的⼯具,redis-sentinel是Redis哨兵程序,redis-benchmark⽤于对Redis做性能基准测试的⼯具,redis-shutdown是⽤于停⽌Redis的专⽤脚本


配置文件

/etc/redis-sentinel.conf   是Redis Sentinel的配置⽂件
/etc/redis.conf   是Redis服务器的配置⽂件

持久化⽂件存储⽬录

/var/lib/redis/ Redis持久化⽣产的RDB和AOF⽂件都默认⽣成于该⽬录下

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

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

相关文章

SHCTF2023 山河CTF Reverse Week3 --- ststst easyre WP详解

文章目录 [WEEK3]ststst[WEEK3]easyre [WEEK3]ststst 64 bit 的 ELF 文件 sub_400763点进去看看 mprotect &#xff0c;这个 这一题是SMC TEA的考察&#xff0c;我写过一篇关于 SMC学习网鼎杯jocker 可以使用idapython写脚本自动修复&#xff0c;也可以使用动态调试&#x…

吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1

Arobas Music Guitar 是一款专业的吉他、班卓琴和贝斯吉他降分器。在熟练的手中&#xff0c;它不仅可以让您创作&#xff0c;还可以编辑、聆听和录制&#xff0c;以及导入和导出乐谱。如果有人感兴趣的话&#xff0c;录音是在八个轨道上进行的&#xff0c;你可以为每个轨道单独…

1.8 网络安全模型

思维导图&#xff1a; 1.8 网络安全模型笔记&#xff1a; 网络安全模型核心概念: 消息在Internet上从发送方传送至接收方&#xff0c;涉及到源地址、目的地址、通信协议&#xff08;如TCP/IP&#xff09;的使用。信息交换的双方需要合作保证交换的可靠性。 安全技术核心组成…

发布一款CAN总线接口的GPS模块

一、模块硬件介绍 GNSS模块&#xff1a;u-blox M9N&#xff0c;支持北斗、GPS、格洛纳斯和伽利略四系统并发处理陶瓷天线&#xff1a;太盟PA025AZ009&#xff0c;支持北斗、GPS、格洛纳斯三系统。根据太盟的回复&#xff0c;25*25*4尺寸的陶瓷天线无法做到完美的四系统兼容&am…

软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化

一、计算机网络 1.1、考情分析 2.1 TCP/IP协议簇 2.1.1常见协议及功能 网际层是整个TCP/IP体系结构的关键部分,其功能是使主机可以把分组发往任何网络并使分组独立地传向目标。 POP3: 110 端口&#xff0c;邮件收取SMTP: 25 端口&#xff0c;邮件发送FTP: 20数据端口/21控制…

最优值函数

一、最优状态值函数 解决强化学习任务大致上意味着找到一种政策&#xff0c;能够在长期内实现很多奖励。对于有限MDPs&#xff0c;我们可以精确地定义一种最优政策&#xff0c;其定义如下。值函数定义了政策的一种部分排序。如果一个政策的预期回报大于或等于另一个政策π0在所…

VS Code2023安装教程(最新最详细教程)附网盘资源

目录 一.简介 二.安装步骤 三.VS Code 使用技巧 网盘资源见文末 一.简介 VS Code是一个由微软开发的跨平台的轻量级集成开发环境&#xff08;IDE&#xff09;&#xff0c;被广泛用于编写各种编程语言的代码。它支持多种编程语言&#xff0c;并且可以通过插件扩展功能。 以…

读图数据库实战笔记04_路径与图变异

1. Groovy 1.1. Java编程语言的一个超集 1.2. Gremlin Console的一个特性是能和Groovy配合使用 1.2.1. Gremlin Console会自动地迭代结果 1.3. 从技术上说&#xff0c;Gremlin Console就是Groovy交互式解释器&#xff08;read-eval-print loop&#xff0c;REPL&#xff09;…

一篇博客理解Recyclerview的使用

从Android 5.0开始&#xff0c;谷歌公司推出了RecylerView控件&#xff0c;当看到RecylerView这个新控件的时候,大部分人会首先发出一个疑问&#xff0c;recylerview是什么&#xff1f;为什么会有recylerview也就是说recylerview的优点是什么&#xff1f;recylerview怎么用&…

图像视觉特效处理工具:Boris FX Optics 2024.0.1

BorisFX光效插件Optics首发2024版&#xff1a;3大新功能详解 2023年9月15日&#xff0c;全球领先的视觉后期软件开发公司BorisFX推出了旗下知名软件Boris FX Optics的全新2024版本&#xff0c;这款备受后期处理爱好者喜爱的Photoshop插件和独立程序再次升级&#xff0c;为您的…

【PC】特殊空投-2023年10月

亲爱的玩家朋友们&#xff0c;大家好&#xff01; 10月特殊空投活动来袭。本月我们也准备了超多活动等着大家来体验。快来完成任务获得丰富的奖励吧&#xff01;签到活动&#xff0c;每周一次的PUBG空投节&#xff0c;还有可以领取PGC2023免费投票劵的活动等着大家&#xff01;…

聊聊统一认证中的四种安全认证协议(干货分享)

大家好&#xff0c;我是陈哈哈。单点登录SSO的出现是为了解决众多企业面临的痛点&#xff0c;场景即用户需要登录N个程序或系统&#xff0c;每个程序与系统都有不同的用户名和密码。在企业发展初期&#xff0c;可能仅仅有几个程序时&#xff0c;管理账户和密码不是一件难事。但…

软考系统架构师知识点集锦九:数据库系统

一、考情分析 二、考点精讲 2.1数据库概述 2.1.1数据库模式 (1)三级模式:外模式对应视图&#xff0c;模式(也称为概念模式)对应数据库表&#xff0c;内模式对应物理文件。(2)两层映像:外模式-模式映像&#xff0c;模式-内模式映像;两层映像可以保证数据库中的数据具有较高的…

linux查看系统版本、内核信息、操作系统类型版本

1. 使用 uname 命令&#xff1a;这将显示完整的内核版本信息&#xff0c;包括内核版本号、主机名、操作系统类型等。 uname -a2. 使用 lsb_release 命令&#xff08;仅适用于支持 LSB&#xff08;Linux Standard Base&#xff09;的发行版&#xff09;&#xff1a;这将显示包含…

reactos 可调试光盘映像

链接&#xff1a;https://pan.baidu.com/s/13M9BZN4IDrWLc3bjnHO79g?pwd0gst 提取码&#xff1a;0gst

【计算机网络笔记】传输层——多路复用和多路分用

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

08 _ 栈:如何实现浏览器的前进和后退功能?

浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退…

Qwt QwtScaleDraw自定义坐标轴

1.概述 QwtScaleDraw 是 Qt 绘图库 Qwt 中的一个类&#xff0c;用于绘制坐标轴刻度线和刻度标签。它提供了一些方法和属性来设置刻度线和标签的样式、布局和对齐方式。 以下是类继承关系&#xff1a; 2.常用方法 标签相关方法&#xff1a; setLabelRotation(double angle)&…

Hudi系列文章7-RFC24 Flink 写入流程优化

文章目录 前言问题背景瓶颈与解决方案瓶颈一解决方法工作流程&#xff1a;精准一次语义容灾CoorinatorCheckpoint如何配合使用StreamWriteOperatorCoordinator CheckpointedFunctionStreamWriteFunctionInstant 提前生成问题 瓶颈二问题解决方案BucketAssignerBucketWriter 重点…

将字符串中符合规则的元素替换为指定元素 re.sub()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串中符合规则的元素 替换为指定元素 re.sub() 选择题 请问re.sub(r[0-9],*,s)的结果是&#xff1a; import re s "hello123" print("【显示】s ",s) print(&quo…