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

redis【1】

什么是 Redis?

  1. 定义与定位
    Redis(Remote Dictionary Server,远程字典服务)是一款 开源的内存优先型键值数据库,核心定位是 “以内存为核心,兼顾性能与可靠性的分布式数据服务”
  • 内存优先:数据默认存储在 内存 中,依托内存低延迟特性(读写延迟亚毫秒级),支撑 10万+ QPS 的超高并发访问;
  • 键值存储扩展:以“键-值”对组织数据,但通过 5种核心数据结构(String、Hash、List、Set、Sorted Set)突破传统键值存储的场景局限;
  • 分布式适配:支持主从复制、哨兵、集群等架构,可横向扩展,满足大型系统的高可用、高性能需求。
  1. 核心特性:速度、可靠与高效的底层逻辑
    1)内存 + 持久化:平衡性能与数据安全
  • 内存存储保证 极致读写速度(比磁盘数据库快万倍),但进程重启易丢失数据;
  • 通过 RDB(快照)(定期全量落盘)和 AOF(操作日志)(实时记录写操作),将内存数据持久化到磁盘,实现“重启不丢数据”。

2)单线程模型 + 异步 IO:高效处理的秘密

  • 核心处理线程为 单线程(避免多线程的锁竞争、上下文切换开销),专注请求逻辑处理;
  • IO 操作(如网络读写、持久化落盘)通过 异步化 实现,充分利用 CPU 资源,兼顾“单线程的简洁”与“多任务的效率”。
  1. 核心能力:从“存储”到“场景化引擎”
    Redis 不止是简单键值存储,更通过 5种内置数据结构 覆盖复杂业务场景:
数据结构核心能力典型场景
String键值存储、数值自增(INCR验证码、分布式 ID、计数器
Hash嵌套键值对存储(如对象属性)用户信息、商品详情
List有序链表(支持首尾操作)消息队列、最新动态列表
Set无序去重 + 交集/并集运算好友去重、共同好友计算
Sorted Set按分数排序的集合(ZADD实时排行榜、延迟任务调度
  1. 核心价值:互联网架构的“刚需基建”
    在大厂业务中,Redis 是 高并发系统的核心支撑,解决三类核心问题:
  • 性能瓶颈:通过缓存拦截热点数据(如商品详情、用户会话),减少 80%+ 数据库读压力,避免 MySQL 被高并发压垮;
  • 场景简化:直接通过 Redis 实现 分布式锁(SETNX)、限流(INCR 计数)、延迟队列 等功能,替代复杂业务逻辑;
  • 高可用保障:主从复制实现读写分离,哨兵自动故障转移,Cluster 集群分片容灾,支撑秒杀、社交、电商等核心业务稳定运行。

小结:Redis 是 “以内存为引擎,数据结构为骨架,高可用为保障” 的分布式键值数据库,核心为高并发场景提供 极速访问、场景化能力、可靠运行 的支撑,是连接“业务需求”与“硬件性能”的关键桥梁。

MySQL和Redis的区别?

MySQL 和 Redis 的区别可从 定位、存储、能力、场景 四大维度拆解,核心是“持久化 vs 高性能”的分工协作:

一、核心定位:“数据管家” vs “性能引擎”

  • MySQL:是 关系型数据库(RDBMS),定位 “可靠的结构化数据仓库”,聚焦 复杂业务的持久化存储(如订单、账务),通过表结构、SQL 和事务保证数据完整性。
  • Redis:是 键值型 NoSQL 数据库,定位 “内存级高速数据层”,聚焦 高并发场景的极速访问(如缓存、计数),用内存和简单结构突破性能瓶颈。

二、存储本质:“磁盘持久化” vs “内存优先”

维度MySQLRedis
存储介质磁盘 为核心,依赖磁盘持久化保证数据不丢(即使断电也能恢复);
虽有内存缓存(如 InnoDB Buffer Pool),但最终需落盘。
内存 为核心,读写延迟亚毫秒级(比磁盘快万倍);
通过 RDB(快照)、AOF(操作日志) 持久化到磁盘,平衡“速度”与“数据不丢”。
容量限制磁盘容量大,适合存储 海量结构化数据(如千万级订单)。内存容量有限(成本高),适合存储 热点数据/临时数据(如高频访问的商品详情)。

三、数据能力:“复杂逻辑” vs “场景化高效”

(1)数据结构与操作
  • MySQL:用 表(行+列) 组织数据,结构固定;
    通过 SQL 实现复杂查询(联表、分组、分页),支持多表关联。
  • Redis:用 键值对 + 5 种数据结构(String、Hash、List、Set、Sorted Set),结构灵活;
    通过 Redis 命令 操作,适合简单场景(如 HSET 存对象、ZADD 做排行榜),但复杂查询能力弱(无法联表、分组)。
(2)事务与一致性
  • MySQL:完整支持 ACID(原子性、一致性、隔离性、持久性),事务可回滚,隔离级别灵活(如可重复读),强一致场景(如转账)必选。
  • Redis:事务仅支持 “命令打包执行”(无回滚,某条命令失败不影响后续执行),一致性依赖主从同步或持久化,更适合“最终一致”场景。

四、场景分工:“持久化业务” vs “高并发缓冲”

MySQL 典型场景Redis 典型场景
需事务、复杂查询:电商订单(下单需扣库存、改状态,依赖事务)、金融账务(转账需强一致)、数据分析(多表联查统计)。高并发读写:缓存热点数据(如商品详情,减少 MySQL 读压力)、实时计数(点赞数、在线人数,依赖 INCR 原子操作)、排行榜(Sorted Set 实时排序)、消息队列(List 模拟生产者-消费者)。

五、性能对比:“磁盘瓶颈” vs “内存优势”

  • MySQL:性能瓶颈在 磁盘 IO(读写慢),高并发下需通过索引优化、分库分表、读写分离提升性能,单机 QPS 通常几千。
  • Redis:依托 内存 + 单线程(核心逻辑无锁竞争) + 异步 IO,单机轻松支撑 10万+ QPS,高并发场景碾压,但内存成本高、容量有限。

总结:两者并非替代关系,而是 “MySQL 做持久化的‘底盘’,Redis 做高并发的‘引擎’”——实际项目中,常通过 “Redis 缓存热点数据 + MySQL 持久化存储” 配合,既保证数据可靠,又突破性能瓶颈。

Redis有什么优点?为什么查询这么快?

一、Redis的核心优点:高并发场景的“全能选手”

  1. 性能极致领先:基于内存存储数据,读写速度可达 10万+ QPS,远超磁盘数据库(如MySQL单库几千QPS),是高并发读场景的“性能天花板”。
  2. 数据结构丰富:原生支持 字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set) 等复杂结构,无需二次开发即可实现缓存、计数器、排行榜等场景,简化业务逻辑
  3. 功能扩展性强:内置 分布式锁(SETNX)、限流(INCR+过期时间)、消息队列(List)、地理位置(GEO) 等功能,直接替代复杂中间件,降低架构复杂度。
  4. 高可用与可扩展:支持 主从复制(读写分离)、哨兵(自动故障转移)、Cluster集群(分片存储),轻松实现TB级数据容量与99.99%可用性,支撑秒杀、直播等高风险业务。
  5. 持久化可靠:通过 RDB(快照)和AOF(日志追加) 机制将内存数据持久化到磁盘,兼顾性能与数据安全性,避免内存断电丢失。
  6. 跨平台与易用性:开源免费,支持Linux/Windows/macOS,提供 简洁API(如SET/GET)和丰富客户端(Java/Python/Go),开发成本极低。

二、查询快的核心原因:从底层设计到执行逻辑的“极致优化”

  1. 内存存储:速度的“物理基础”
    数据直接存储在 内存(RAM) 中,内存访问速度为 纳秒级(~100ns),而磁盘(如SSD)访问为 微秒级(~100μs),内存速度是磁盘的 1000倍以上,这是查询快的 根本硬件优势

  2. 数据结构:操作效率的“骨架支撑”
    Redis的核心数据结构经过 算法级优化,确保单操作复杂度极低:

    • 字符串:动态字符串(SDS)支持O(1)长度获取,避免C字符串缺陷;
    • 哈希表:链地址法解决冲突,负载因子过高时自动扩容,单键查询复杂度O(1)
    • 有序集合:基于 跳表(Skip List) 实现,范围查询(如Top N排行榜)复杂度O(logN),远超数组排序的O(NlogN);
    • 列表:双向链表+压缩列表混合实现,首尾操作O(1),中间操作高效。
  3. 单线程模型:无开销的“高效执行”
    Redis处理命令的主线程是 单线程,避免了多线程的 上下文切换、锁竞争 等开销(这些开销在高并发下会严重拖慢速度)。同时通过 I/O多路复用(select/epoll/kqueue) 处理 thousands 级并发连接,实现“单线程高并发”的高效模式。

  4. 精简执行:无冗余的“轻量内核”

    • 命令处理逻辑极简,无磁盘I/O阻塞(持久化在后台线程执行,不影响主线程);
    • 拒绝复杂SQL解析,采用 键值对直接访问,减少语法解析和优化器开销;
    • 内存分配采用 jemalloc/tcmalloc 高效内存管理器,减少碎片,提升内存利用率。
  5. 网络模型:低延迟的“通信优化”
    采用 TCP长连接 减少握手开销,支持 管道(Pipeline)批量命令 一次性执行,降低网络往返次数,进一步压缩延迟。

小结:Redis的优点源于“内存存储+丰富结构+高可用设计”,而查询快的本质是 “内存速度打底+数据结构高效+单线程无开销+执行逻辑精简” 的多层优化,使其成为高并发场景中“速度与可靠性兼备”的核心组件。

Redis 和 Memcached 的区别?

1. 数据结构支持
Redis 提供 丰富的原生数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等,甚至支持 Bitmap、HyperLogLog 等高级类型,能直接满足复杂业务场景(如排行榜、计数器、消息队列)。
Memcached 仅支持 单一的键值对(Key-Value),且值只能是简单字符串或二进制数据,复杂逻辑需依赖客户端实现。

2. 内存管理机制
Redis 采用 自定义的内存分配器(如 jemalloc),支持动态扩容,内存利用率更高,且允许为键设置过期时间(精确到毫秒),过期策略更灵活(惰性删除+定期删除)。
Memcached 使用 Slab Allocation 机制,内存按固定大小分块,可能因数据大小与块不匹配导致 内存碎片,且过期时间精度较低(秒级),删除依赖惰性回收。

3. 持久化能力
Redis 支持 两种持久化方式:RDB(快照式持久化,定期生成内存快照)和 AOF(Append-Only File,日志式持久化,记录每笔写操作),可保障数据在重启后不丢失,适合需数据可靠性的场景。
Memcached 不支持持久化,数据完全存储在内存中,服务重启或崩溃后数据会全部丢失,仅适合纯缓存场景。

4. 高可用与集群支持
Redis 原生支持 高可用和集群方案:主从复制实现读写分离,哨兵(Sentinel)自动完成故障转移,Cluster 模式支持分片存储和动态扩缩容,原生解决分布式场景下的高可用和容量扩展问题。
Memcached 无原生高可用机制,集群需依赖客户端一致性哈希或第三方工具(如 Twemproxy)实现,故障转移和分片需手动或额外开发,稳定性和扩展性较弱。

5. 功能扩展性
Redis 支持 事务(Multi/Exec)、Lua 脚本(原子执行复杂逻辑)、发布订阅(Pub/Sub)、地理空间(Geo)等高级功能,可直接作为“轻量级数据库”使用。
Memcached 功能极简,仅提供基础的增删改查命令,无事务、脚本等扩展能力,定位更纯粹的“缓存工具”。

6. 适用场景
Redis 适合 复杂业务场景,如高并发缓存(带过期策略)、分布式锁、实时排行榜、消息队列、用户会话存储等,需兼顾性能与功能灵活性。
Memcached 适合 简单高频读场景,如静态数据缓存(图片URL、页面片段),追求极致的单机性能和部署简单性,不依赖持久化或复杂逻辑。

核心差异总结:Redis 是“功能全面的分布式键值数据库”,靠丰富数据结构、持久化和高可用支撑复杂场景;Memcached 是“轻量高效的纯缓存工具”,靠简单设计聚焦基础缓存性能。

为什么用 Redis 作为 MySQL 的缓存?

核心逻辑:MySQL 作为关系型数据库,虽擅长持久化存储和复杂查询,但在高并发场景下存在性能瓶颈;Redis 凭借 内存存储、高效结构和低延迟特性,能完美弥补这些短板,形成“MySQL 存持久数据 + Redis 存热点数据”的高效架构组合。

1. 内存存储带来的极致性能,解决 MySQL 读延迟问题
MySQL 数据存储在磁盘中,查询需经历磁盘 IO、索引遍历等过程,单条查询延迟通常在 毫秒级(10-100ms);而 Redis 数据完全存储在内存中,依托 高效数据结构(如哈希表、跳表) 和单线程模型(避免线程切换开销),读写延迟可低至 微秒级(10-100μs),速度提升 10-100 倍。对于高频访问的热点数据(如商品详情、用户会话),用 Redis 缓存后能瞬间响应请求,大幅降低用户等待时间。

2. 拦截高频读请求,减轻 MySQL 压力
互联网业务中,80% 的请求集中在 20% 的热点数据(如爆款商品、首页内容)。若这些请求全部直接访问 MySQL,会导致数据库频繁执行磁盘 IO 和锁竞争,甚至因连接数爆满、CPU 过载而崩溃。Redis 作为缓存可 拦截 80%+ 的读请求,让 MySQL 仅处理缓存未命中的请求和写操作,显著减少 MySQL 的 IO 负载和计算压力,保障数据库稳定运行。

3. 支持丰富缓存策略,适配多样业务场景
Redis 提供 灵活的过期策略(如惰性删除、定期删除)和数据结构,能精准适配 MySQL 缓存的核心需求:

  • 对临时数据(如用户登录会话),用 过期键(EXPIRE) 自动清理,无需手动维护;
  • 对高频更新数据(如商品库存),用 String 结构 快速读写,或通过 Hash 结构 存储多字段数据,减少缓存更新成本;
  • 对热点排行数据(如销量 Top10),用 Sorted Set 实时排序,避免 MySQL 频繁执行 ORDER BY 耗时查询。

4. 高可用与分布式支持,保障缓存稳定性
Redis 原生支持 主从复制、哨兵(Sentinel)和 Cluster 集群,可实现缓存服务的高可用和容量扩展:

  • 主从复制解决单点故障问题,确保缓存服务不中断;
  • 集群模式支持分片存储,可存储海量热点数据,避免单节点内存不足;
  • 稳定的缓存服务能持续拦截请求,防止因缓存失效导致“缓存雪崩”,间接保护 MySQL 不被突发流量压垮。

5. 与 MySQL 分工互补,优化整体架构效率
MySQL 擅长 持久化存储、事务保证和复杂关联查询(如多表 JOIN),适合存储核心业务数据(如订单、用户信息);Redis 擅长 高频读写、临时数据存储和简单逻辑计算,适合作为“数据缓冲层”。两者结合后:

  • 读请求优先查 Redis,命中则直接返回,未命中再查 MySQL 并同步更新缓存;
  • 写请求先更新 MySQL,再通过策略(如更新缓存或删除缓存)维持数据一致性,形成“快查缓存 + 稳存数据库”的高效闭环。

总结:Redis 作为 MySQL 缓存,核心价值是通过 内存级速度、高并发承载能力、灵活缓存策略和高可用性,解决 MySQL 在高读压力下的性能瓶颈,同时与 MySQL 形成功能互补,最终提升整个系统的响应速度和稳定性。

Redis 数据类型以及使用场景分别是什么?

五种常见的 Redis 数据类型是怎么实现?

Redis 是单线程还是多线程,为什么?

Redis 单线程模式是怎样的?

Redis 采用单线程为什么还这么快?

Redis 6.0 之前为什么使用单线程?

Redis 6.0 之后为什么引入了多线程?

Redis 如何实现数据不丢失?

Redis 持久化机制?

AOF 日志是如何实现的?

RDB 快照是如何实现的呢?

为什么会有混合持久化?

Redis 如何实现服务高可用?

Redis事务

集群脑裂导致数据丢失怎么办?

Redis 使用的过期删除策略是什么?

Redis的过期策略以及内存淘汰机制

Redis 持久化时,对过期键会如何处理的?

Redis 的高可用如何实现?讲讲主从复制。

Redis 主从模式中,对过期键会如何处理?

Redis 内存满了,会发生什么?

Redis 内存淘汰策略有哪些?

LRU 算法和 LFU 算法有什么区别?

如何避免缓存雪崩、缓存击穿、缓存穿透?

如何设计一个缓存策略,可以动态缓存热点数据呢?

说说常见的缓存更新策略?

如何保证缓存和数据库数据的一致性?

Redis 如何实现延迟队列?

Redis 的大 key 如何处理?

Redis 管道有什么用?

Redis 中的事务是如何实现的?怎么保证事务的原子性?

Redis 中的 Pub/Sub 是怎么工作的?应用场景是什么?

Redis 事务支持回滚吗?

Redis 的主从复制数据同步机制是什么?如何避免数据不一致?

热点数据和冷数据是什么

如何用 Redis 实现分布式锁的?

http://www.lryc.cn/news/603208.html

相关文章:

  • 小程序视频播放,与父视图一致等样式设置
  • zama test
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • 数据结构之时间复杂度
  • 前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局
  • ZKmall开源商城中台架构实践:API 网关与服务治理如何撑起电商技术骨架
  • 在 PolkaVM 上用 Rust 实现 ERC20 合约的全流程开发指南
  • 接口自动化测试pytest框架
  • c++-list
  • 【VOS虚拟操作系统】未来之窗打包工具在前端资源优化中的应用与优势分析——仙盟创梦IDE
  • Redis内存使用耗尽情况分析
  • 40+个常用的Linux指令——下
  • 艾利特机器人:光伏机器人如何重塑清洁能源制造新格局
  • 【CDH】CDH环境中升级ZooKeeper的实战记录
  • 基于KMeans、AgglomerativeClustering、DBSCAN、PCA的聚类分析的区域经济差异研究
  • 【Linux知识】Linux Shell 脚本中的 `set -ex` 命令深度解析
  • 复现cacti的RCE(CVE-2022-46169)
  • Go 客户端玩转 ES|QL API 直连与 Mapping Helpers 实战详解
  • upload-labs靶场通关(1-12)
  • 服务器之光:Nginx--反向代理模块详解及演练
  • 图论:Bellman_ford算法
  • 《汇编语言:基于X86处理器》第10章 结构和宏(3)
  • 【WRF-Chem 实例1】namelist.input 详解- 模拟CO2
  • 鸿蒙Harmony-自定义List组件,解决List组件手势滑动点击卡住问题
  • 【图像噪点消除】——图像预处理(OpenCV)
  • 创建型设计模式-工厂方法模式和抽象工厂方法模式
  • 社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)
  • Gartner发布CTEM指南:使用持续威胁暴露管理来减少网络攻击
  • 智能体安全与可信AI:防护机制与伦理考量