当前位置: 首页 > news >正文

Redis基本介绍

文章目录

  • 1. 认识Redis
  • 2. Redis特性
  • 3. redis的应用场景

1. 认识Redis

Redis的初心是用来作为一个“消息中间件”(消息队列)的,但是当前很少会直接使用Redis作为消息中间件,而是经常将Redis当作缓存和数据库(在内存中存储数据)来使用。

我们熟悉的MySQL最大的问题在于,访问速度比较慢,但是在很多的互联网产品中,对于性能的要求很高。Redis作为数据库来使用,其速度很快。但是Redis有一个很大的劣势,它的存储空间是有限的。

Redis是在分布式系统中,才能发挥威力的,如果只是单机程序,直接通过变量存储数据的方式是比使用Redis更优的选择。

如果在分布式系统中采用定义变量来存储数据的话是不能满足我们的需求的,定义的变量是只能在当前的服务器的进程的内部可以进行通信的。Redis就是基于网络,可以把自己内存中的变量给别的进程,甚至给别的主机的进程进行使用。

虽然可以将Redis和MySQL结合起来使用,这样可以做到又大又快,但是这样系统的复杂程度大大提升了,而且如果数据发生了修改,还涉及到Redis和MySQL之间的数据同步问题。

2. Redis特性

1. 在内存中存储数据

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

2.可编程性
针对Redis的操作,可以直接通过简单的交互式命令进行操作,也可以通过一些脚本的方式,批量执行一些操作,并且可以带有一些逻辑。在redis中主要是支持使用lua编程语言来编写脚本。

3. 可拓展性

Redis提供了一组API,可以在Redis原有的功能基础上再进行扩展。比如,Redis自身已经提供了很多的数据结构和命令,可以通过扩展让redis支持更多的数据结构和命令。

3. 持久化
为了让Redis更快,redis是把数据存储在内存上的,但是内存上的数据是易失的(进程退出或系统重启)。
Redis会把数据存储在硬盘上(内存为主,硬盘为辅)。硬盘相当于对内存的数据备份了一下,如果redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态。

4. 支持集群
一个Redis能存储的数据是有限的,如果想存储更多的数据,就可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分。

5. 高可用(备份)
Redis自身也是支持“主从”结构的,从节点就支持主节点的备份。

问:为什么Redis快???

答:

  1. Redis数据在内存中,要比访问硬盘的数据库要快很多。
  2. Redis核心功能执行的都是比较简单的逻辑,核心功能都是比较简单的操作内存的数据结构。
  3. 从网络角度上,Redis使用 IO多路复用 (使用一个线程来管理很多个socket) 的方式,这样就可以在系统资源开销比较小的前提下,比较高效的处理大的并发量。
  4. Redis使用的是单线程模型,减少了不必要的线程之间的竞争开销。
    并不是在所有的业务场景下多线程都会提升效率的。多线程提升效率的前提是执行CPU密集型的任务,使用多个线程可以充分的利用CPU多喝资源。但是redis的核心任务主要就是操作内存中的数据结构,不会占用太多的CPU资源。
  5. redis是使用C语言开发的,所以很快。(可以根据自己的理解来看)
    MySQL也是使用C语言进行开发的。

3. redis的应用场景

1. 当作数据库来使用
大多数情况下,考虑到数据存储,优先考虑的是“大”,但是仍然有一些场景,考虑的是“快”。作为数据库时i,redis存的是全量数据,这个数据是不能随便丢失的。

2. 作为缓存

使用MySQL存储时,虽然大,但是速度慢,那么就可以将redis作为缓存,采用“二八原则”,吧一些热点数据存储在redis中。作为缓存时,redis存的时部分数据,全量数据都是以MySQL为主的,哪怕redis中的数据丢失了,还可以从MySQL中重新加载出来。

3. 会话存储
比如,cookie和sessionzhong 存储用户的身份信息。之前session是存储在服务器中的,但是这里引入了负载均衡器,我们希望负载均衡器把同一个用户的请求打到同一个应用服务器上,这个时候就可以把会话存储在Redis中,后续的每一台服务器在读取和写入会话时都去访问redis,这样不管当前用户的请求打到哪一台服务器,始终都是在redis中拿会话的,这样就可以保证所有的应用服务器都可以获取到用户信息。

这样还有一个好处,应用程序重启了,但是我们的会话是不会丢失的。

4. 消息队列(服务器)

基于这个就可以实现一个网络版本的生产者消费者模型。对于分布式系统中,服务器和服务器之间,有时候也需要使用到生产者消费者模型。

http://www.lqws.cn/news/498943.html

相关文章:

  • 词编码模型怎么进行训练的,输出输入是什么,标签是什么
  • leetcode:98. 验证二叉搜索树
  • oracle 表空间与实例妙用,解决业务存储与权限处理难题
  • 企业主动风险管理破局供应链“黑天鹅”,善用期货
  • C# Task 模式实现 Demo(含运行、暂停、结束状态)
  • Redis精简总结|一主二从哨兵模式(工作机制)|集群模式|缓存的穿透雪崩击穿
  • 以计数器程序为例,简析JVM内存模型中各部分的工作方式
  • 72-Oralce Temporay tablespace(单实例和多租户下的管理)
  • 互联网大数据求职面试:从Zookeeper到Flink的技术探讨
  • 华为云Flexus+DeepSeek征文|基于Dify构建抓取金融新闻并发送邮箱工作流
  • 实现 “WebView2 获取word选中内容
  • 板凳-------Mysql cookbook学习 (十--9)
  • TCP客户端发送消息失败(NetAssist做客户端)
  • Java底层原理:深入理解JVM内存管理机制
  • 在Springboot项目部署时遇到,centos服务器上,curl请求目标地址不通 ,curl -x 可以请求通的解决办法
  • AWS服务器扩充硬盘
  • 汽车制造领域:EtherCAT转Profinet网关案例全面解析
  • Threejs实现 3D 看房效果
  • 基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
  • 使用Windows自带的WSL安装Ubuntu Linux系统
  • Python 数据分析与可视化 Day 5 - 数据可视化入门(Matplotlib Seaborn)
  • 《Redis高并发优化策略与规范清单:从开发到运维的全流程指南》
  • 打包winform
  • 使用uv安装python任意版本,命令:uv python install
  • 数组题解——​最大子数组和​【LeetCode】(更新版)
  • (nice!!!)(LeetCode 每日一题) 2081. k 镜像数字的和 (枚举)
  • (cvpr2025) DefMamba: Deformable Visual State Space Model
  • 008 Linux 开发工具(下) —— make、Makefile、git和gdb
  • VitePress搭建静态博客
  • logstash读取kafka日志写到oss归档存储180天