李歘歘的朋友圈

李歘歘的朋友圈

专注于计算机知识分享

MySQL数据库——版本号机制和CAS(Compare And Swap)
MySQL

MySQL数据库——版本号机制和CAS(Compare And Swap)

大家好,这里是编程Cookbook。本文详细介绍乐观锁的两种实现方式:版本号机制和CAS(Compare And Swap)。 MySQL 内置的并发控制机制 MySQL 内置了强大的并发控制机制,例如 MVCC(多版本并发控制) 和锁机制。这些机制在更高层次上实现了并发控制。自动处理事务隔离和并发冲突,适用于复杂数据库事务管理。 MVCC(多版本并发控制) * 核心:基于事务 ID 和 Undo Log,实现高效的读写并发。 * 特点:快照读无需加锁,写操作使用回滚日志实现隔离性。 MVCC的详细信息参考:《MySQL数据库——多版本并发控制MVCC》 锁机制 1. 按锁粒度:表锁、行锁(InnoDB 默认)。 2. 按锁类型:共享锁(S 锁)、排他锁(X 锁)。 3. 意向锁:
6 min read
MySQL数据库——主从复制
MySQL

MySQL数据库——主从复制

大家好,这里是编程Cookbook。本文详细介绍 MySQL 的主从复制,从原理到配置再到同步过程。 简介 MySQL 主从复制(Replication)是一种数据分布式存储技术,通过将主库(Master)的数据和操作复制到一个或多个从库(Slave),实现数据的同步和备份。它常用于读写分离、数据容灾、数据分布等场景。 核心组件 1. 主库(Master): * 负责记录所有数据变更操作到 Binary Log 中。 * 通过网络将 Binary Log 提供给从库。 2. 从库(Slave): * 负责从主库获取 Binary Log,并通过中继日志(Relay Log)将其重放在本地,最终实现与主库的数据同步。 3. 二进制日志(Binary Log): * 主库记录所有数据的逻辑操作,用于主从复制和增量备份。 * 包含数据变更的具体操作(语
10 min read
MySQL数据库——多版本并发控制MVCC
MySQL

MySQL数据库——多版本并发控制MVCC

大家好,这里是编程Cookbook。本文详细介绍MySQL的并发控制:多版本并发控制MVCC。 背景介绍 许多人认为 MVCC(Multi-Version Concurrency Control,多版本并发控制) 是一种乐观锁的实现方式,我们先来了解一下什么是乐观锁和悲观锁。 数据库并发控制——锁机制 在数据库系统中,并发控制是保证多个事务在并发执行时数据一致性的核心技术。传统的并发控制方法是使用 锁,它是一种直接而有效的解决方案。 * 锁的分类: * DQL(Data Query Language,数据查询语言):查询数据(如 SELECT)时使用 读锁。 * DML(Data Manipulation Language,数据操作语言):对数据进行增、删、改操作(如 INSERT、DELETE、UPDATE)时使用 写锁。 * DDL(Data Definition Language,数据库定义语言)
13 min read
MySQL数据库——常见慢查询优化方式
MySQL

MySQL数据库——常见慢查询优化方式

大家好,这里是编程Cookbook。本文详细介绍MySQL的慢查询相关概念,分析步骤及其优化方案等。 什么是慢查询日志? 慢查询日志是MySQL提供的一种日志记录机制,用于记录执行时间超过指定阈值(long_query_time)的SQL语句。通过慢查询日志,可以识别和优化性能较差的SQL查询,是数据库性能调优的重要工具。 * 关键点: * 默认阈值:long_query_time 默认值为 10秒,表示运行时间超过10秒的SQL会被记录。 * 默认状态:MySQL 默认未开启慢查询日志,需要手动启用。 * 日志存储方式:支持存储为文件或表。 慢查询日志的相关参数 MySQL慢查询日志的核心参数及其含义如下: 1. 启用和路径配置: * slow_query_log:是否开启慢查询日志,1 表示开启,0 表示关闭。 * slow-query-log-file:日志文件路径和名称(MySQL 5.6及以上版本)。 * log-slow-que
10 min read
MySQL数据库——日志介绍
MySQL

MySQL数据库——日志介绍

大家好,这里是编程Cookbook。本文详细介绍MySQL的日志类型及其作用,包括 Redo Log、Undo Log、Binary Log 和 Error Log 等,在事务维护,主从同步,慢查询等方面都至关重要。 日志类型 MySQL 中用于数据持久化和恢复的日志机制非常关键,常见的日志类型包括 Redo Log、Undo Log、Binary Log 和 Error Log 等。每种日志都有特定的作用,确保数据库在不同情况下的可恢复性、事务的隔离性和一致性。 这些日志在 MySQL 的数据库操作流程中相互配合,确保数据库的高可用性和高一致性: 1. Undo Log 支持事务的隔离性,并允许回滚事务。 2. Redo Log 保证数据持久性,支持事务提交后的崩溃恢复。 3. Binary
17 min read
MySQL数据库——索引潜规则(最左前缀原则)
MySQL

MySQL数据库——索引潜规则(最左前缀原则)

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍MySQL索引的关键潜规则——最左前缀原则。 @[toc] 图示单值索引和联合索引 单值索引 * 单值索引(唯一索引、主键索引、全文索引等) 是指在数据库表中创建的、仅涉及单个列的索引。也就是说,单值索引是基于表中的单一列(例如,单个字段)创建的索引结构。单值索引底层的 B+ 树如下所示: 联合索引 * 与单值索引只在一个列上建立,联合索引建在多个列上的索引,通常用于优化多列查询。当查询条件中涉及多个列时,数据库引擎会使用最适合的索引来提高查询效率。 * 联合索引的列顺序非常重要,通常是根据查询中最常用的过滤列进行排序。 联合索引的结构依旧是一颗 B+ 树,只不过联合索引的键值数量不是一个,而是多个,如下图所示: 当索引为联合索引时,数据库会依据联合索引最左的字段来构建 B+ 树,也叫 最左前缀匹配原则。 在上图中,我们假如创建一个 (a, b)
6 min read
MySQL数据库——索引潜规则(回表查询、索引覆盖、索引下推)
MySQL

MySQL数据库——索引潜规则(回表查询、索引覆盖、索引下推)

大家好,这里是编程Cookbook。本文详细介绍MySQL索引的三个潜规则——回表查询、索引覆盖、索引下推,以提升数据库的性能。 之前我们在《MySQL数据库——索引介绍》文章中介绍了按存储方式将索引划分为聚集索引和非聚集索引,由此引出了一些索引设计的潜规则(回表查询、索引覆盖、索引下推)。 * 回表查询、索引覆盖、索引下推 是 InnoDB 的核心优化特性,尤其是索引下推,这是 InnoDB 的独有能力。 * 如果使用 MyISAM 或 Memory 存储引擎,只能利用回表查询和索引覆盖,无法使用索引下推优化。 索引回顾 聚集索引(Clustered Index) InnoDB 中的主键索引就是聚簇索引。 * 叶子节点存储整行数据。 * 索引即数据,查询到索引即查询到数据。 * 表中行的物理顺序与键值的逻辑(索引)顺序相同。 * 每个表只能有一个聚集索引,因为索引只能按照一种方式排序。 非聚集索引(Secondary Index/辅助索引/
8 min read
MySQL数据库——索引结构之B+树
MySQL

MySQL数据库——索引结构之B+树

大家好,这里是编程Cookbook。本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B+树作为索引结构。 树的演化 1. 树 非线性结构,每个节点有唯一的一个父结点和多个子结点(子树),为一对多的关系。 2. 二叉树 每个结点最多有两颗子树,并且子树有左右之分,不能颠倒。 3. 满二叉树 每一层的结点个数都达到了当层能达到的最大结点数。 4. 完全二叉树 除了最下面一层之外,其余层的结点个数都达到了当层能达到的最大结点数,且最下面一层只从左至右连续存在若干结点,右边的结点全部不存在。 5. 二叉查找树 (BST) 又称为二叉排序树、二叉搜索树。定义如下: * 要么二叉査找树是一棵空树。 * 要么二叉查找树由根结点、左子
9 min read
MySQL数据库——事务介绍
MySQL

MySQL数据库——事务介绍

大家好,这里是编程Cookbook。本文详细介绍MYSQL的事务,包括ACID、隔离级别、以及如何解决并发带来的问题。 MySQL事务是对数据库操作的一组处理逻辑单元,通常包括一系列的SQL语句,事务保证了这些语句要么全部成功执行,要么全部失败后回滚。 事务的特性:ACID MySQL中的事务管理机制符合ACID特性,确保数据的一致性、可靠性和完整性。分别是: 1. 原子性(Atomicity) 2. 一致性(Consistency) 3. 隔离性(Isolation) 4. 持久性(Durability) 1. 原子性(Atomicity) 定义: * 事务中的所有操作要么全部完成,要么全部不做,不能只执行部分操作。换句话说,事务是“原子”级的,事务的操作不可分割。 * 如果事务在执行过程中发生错误,所有已执行的操作都会回滚,数据会恢复到事务开始之前的状态。 实现原理: 原子性通过 undo log 来实现。事务执行过程中,如果发生错误或用户执行了回滚(
21 min read
MySQL数据库——索引介绍
MySQL

MySQL数据库——索引介绍

大家好,这里是编程Cookbook。本文详细介绍MySQL数据库中的索引,包括索引结构设计(B+树、哈希等)、用途(主键索引、唯一索引等)、聚集索引和非聚集索引,以及索引创建和使用的原则等。 按底层数据结构分类 MySQL 提供了四种主要的索引实现,每种索引类型有不同的应用场景和特点。以下是这四种索引类型: 索引类型 适用场景 支持的操作 优缺点 存储引擎支持 B+树 索引 常规查询(等值、范围、排序) 等值查询 (=)、范围查询 (>、<)、排序 (ORDER BY)、like、联合索引 优点:高效适配大多数查询操作 缺点:不适合哈希快速定位 InnoDB 和 MyISAM ,Memory(默认情况下是使用哈希索引) 哈希索引 等值查询 等值查询
20 min read
Redis数据库——Redis快的原因
Redis

Redis数据库——Redis快的原因

大家好,这里是编程Cookbook。本文详细介绍redis为什么这么快的原因,这里是本系列文章的总结篇(后面可能会补充一些内容,或者在原文上进行更新迭代),将从各方面出发解释为什么redis快,受欢迎的原因。 Redis 的高性能主要归功于其以下几个设计和实现特性: 内存 详细内容参考本系列文章中的内存部分: * 《Redis数据库——内存淘汰机制》 * 《Redis数据库——内存分配器》 * 《Redis数据库——内存预分配》 内存数据库 Redis 是一个 内存数据库,它将所有的数据存储在内存中,而不是磁盘上。内存访问速度远高于磁盘访问速度,这使得 Redis 在数据读写上非常快。 预分配内存 Redis 使用 内存池 来减少内存分配和回收的开销。内存池为 Redis 提供了高效的内存管理,避免了频繁的内存分配和回收操作,提高了性能。 数据结构 详细内容参考本系列文章中的数据结构部分: * 《Redis数据库——数据结构类型》 * 《Redis数据库——Hash(哈希)的扩容机制(rehash)》 * 《Red
5 min read
Redis数据库——单线程和并发请求
Redis

Redis数据库——单线程和并发请求

大家好,这里是编程Cookbook。本文详细介绍为什么Redis数据库使用单线程还这么快,以及如何处理并发请求。 Redis 是一个 单线程 的应用,这意味着 Redis 处理所有客户端请求的核心逻辑是在单个线程中完成的。尽管 Redis 使用单线程处理客户端的请求,但它的高性能并不受到影响,官方表明 redis 可以做到每秒近10w的并发。下面是对 Redis 单线程设计的详细介绍。 为什么 Redis 使用单线程? Redis 的单线程设计并不是一个随意的选择,而是基于以下几个关键因素: * CPU瓶颈不明显:在 Redis 中,瓶颈通常不是 CPU 的计算能力,而是 网络 I/O 和 内存访问。大多数操作都可以在内存中进行,且 Redis 的数据结构和操作都经过高度优化。 * 减少多线程开销:在多线程模型中,操作系统需要进行 线程切换 和 锁管理,
13 min read
Redis数据库——Cluster集群模式
Redis

Redis数据库——Cluster集群模式

大家好,这里是编程Cookbook。本文详细介绍Redis数据库的Cluster集群模式,包括工作原理,哈希槽,路由和配置原理等。 什么是 Redis Cluster 集群? Redis Cluster 在 3.0 版本中引入,是 Redis 的集群模式解决方案。提供了一种原生的分布式集群解决方案,用于解决 Redis 的水平扩展(sharding)问题【类似MySQL的分库分表】,自动将数据划分为多个分片(Shards),每个分片由一个主节点(Master)负责。每个主节点可以有多个从节点(Slave)用于数据冗余备份。 Redis Cluster 由多个节点组成,节点之间通过内部通信协议进行数据交换和协作。Redis Cluster 采用分布式哈希(hashing) 方式来管理数据,通过将数据分片并分配给不同的节点,确保 每个 Redis 节点只管理一部分数据。整个集群由多个 Redis
24 min read
Redis数据库——Sentinel哨兵机制
Redis

Redis数据库——Sentinel哨兵机制

大家好,这里是编程Cookbook。本文详细介绍Redis的Sentinel哨兵机制,包括其原理,哨兵选举,配置等内容。 Redis 哨兵机制(Redis Sentinel) 什么是 Redis 哨兵机制? Redis 哨兵(Sentinel)是 Redis 提供的高可用性解决方案,旨在确保 Redis 服务的高可用性和自动故障转移。它通过监控 Redis 主节点和从节点的运行状态,自动检测故障并实现故障转移,保证系统在出现故障时能够自动恢复,避免单点故障导致的服务中断。 Redis 哨兵机制由多个哨兵实例组成,这些实例彼此协作来监控 Redis 节点的状态。每个哨兵实例都可以独立工作,但它们之间会交换信息,以确保整个系统的一致性。其由下面的内容组成: * 哨兵节点:每个哨兵节点独立运行并执行监控、故障检测、故障转移等任务,并 不负责读写数据。Redis 哨兵需要至少 三个哨兵节点,并且最好是 奇数个哨兵节点来参与选举投票。 * 主节点:负责处理写请求的
11 min read
Redis数据库——主从复制
Redis

Redis数据库——主从复制

大家好,这里是编程Cookbook,关注公众号「编程Cookbook」,获取更多面试资料。本文详细介绍Redis的主从复制模式,包括作用,原因,工作原理,同步流程等。 主从复制 什么是 Redis 主从复制? Redis 主从复制是一种将主节点(master)上的数据同步到其他从节点(slave)Redis 实例的机制。数据复制是单向的,只能从主节点同步到从节点,或者层级复制。 * 主节点(Master):负责写操作。 * 从节点(Slave):负责读操作,复制主节点的数据。 * 默认配置:每台 Redis 服务器默认启动时都是主节点(Master),但是通过配置,可以将某些 Redis 服务器设置为从节点(Slave),从节点是通过配置来指定的,不是自动的。 * 树形结构:一个主节点可以有多个从节点,一个从节点只能有一个主节点。 节点数量: * 1个主节点,多个从节点 是标准的主从复制架构。
28 min read
Redis数据库——部署模式
Redis

Redis数据库——部署模式

大家好,这里是编程Cookbook。本文简要介绍Redis的部署模式,包括主从复制、哨兵机制、集群模式等。后面会详细介绍每一种部署模式,本文为各部署模式的简要介绍。 Redis 支持多种部署模式来提高性能、扩展性和高可用性。主要的部署模式包括: 单节点模式 * 适用于小型应用,只有一个 Redis 实例。虽然简单,但无法应对单点故障,也不能横向扩展。 * 适用场景:适用于小型应用或者开发/测试环境,但不可用于生产环境中需要高可用性和扩展性的系统。 主从复制模式 * 适用于 读多写少的场景。通过主从复制,主节点负责处理写操作和一部分读操作,从节点处理更多的读请求。 * 适合扩展系统的读取能力,但存在主节点故障时的单点风险。 * 适用场景:适用于读多写少的应用,通过从节点扩展读取能力,提高整体性能。 后续文章:《Redis数据库——主从复制》 Redis Sentinel(哨兵) * Redis Sentinel 是 Redis 的 高可用解决方案,它监控 Redis
4 min read
Redis数据库——持久化机制
Redis

Redis数据库——持久化机制

大家好,这里是编程Cookbook。本文详细介绍Redis的持久化机制,目标是将内存中的数据持久化到磁盘,以保证数据的可靠性和在重启后的恢复能力。 Redis 提供了三种持久化机制:RDB(Redis Database Snapshot) 、AOF(Append Only File)以及二者结合的混合持久化,以及一种混合模式(Hybrid Persistence)。这些机制的目标是将内存中的数据持久化到磁盘,以保证数据的可靠性和在重启后的恢复能力。 * RDB:在指定的时间间隔能对你的数据进行快照存储。 * AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。 * 混合持久化:在 Redis 4.0 引入,通过结合 RDB 和 AOF 的特性,既保留 RDB 的高效性,又降低 AOF 文件大小和启动时间。 Redis 默认的持久化机制取决于 Redis 的配置,但通常情况下,Redis 默认启用了
14 min read
Redis数据库——布隆过滤器(BloomFilter)
Redis

Redis数据库——布隆过滤器(BloomFilter)

大家好,这里是编程Cookbook。本文详细介绍Redis的布隆过滤器,解决缓存穿透的原理,及其改进的计数型布隆过滤器。 布隆过滤器概述 布隆过滤器(Bloom Filter)是一种概率型数据结构,用于检测某个元素是否在一个集合中。其特点是能告诉你某个元素“一定不存在 或者 可能存在”于某个集合中。布隆过滤器实际上是由一个很长的二进制向量和多个随机映射函数构成: 二进制向量:由0和1组成,初始状态为0。 * 0表示某元素一定不在集合中。 * 1表示该元素可能在集合中。 用途 布隆过滤器广泛应用于需要高效处理大规模数据的场景,尤其是减少磁盘I/O或网络请求的场合。例如: * 网页 URL 去重:通过布隆过滤器检查网址是否已存在,若已存在则不再读取。 * 垃圾邮件识别:通过发送方地址命中布隆过滤器的黑名单来过滤垃圾邮件。 * 黑名单:用于检测某个元素是否在黑名单中。 * 查询加速:尤其是基于键值对(KV)结构的数据查询。 * 集合元素重复判断:判断一个元素是否已经出现。 * Redis 缓存穿透问题:避免不必要的缓存查询。 原理
8 min read
Redis数据库——ZSet的底层实现(跳表)
Redis

Redis数据库——ZSet的底层实现(跳表)

大家好,这里是编程Cookbook。本文详细介绍ZSet数据类型中跳表的底层实现,包括基本特点和常用操作。 ZSet(有序集合) 概述 ZSet(Sorted Set,有序集合) 是 Redis 提供的一个非常强大的数据结构。它是一个 没有重复成员 且每个成员都关联着一个 分数(score) 的集合,Redis 会根据成员的分数对它们进行 自动排序。这个数据结构在许多需要有序数据的场景中非常有用,如排行榜、带有优先级的任务队列等。 ZSet 提供了非常高效的操作支持,如按排名查询、按分数查询、获取范围内的元素等,且在执行这些操作时有着较低的时间复杂度。 基本特点 * 成员唯一性:ZSet 中的每个元素都是唯一的(没有重复的成员)。 * 分数(score):每个成员都有一个与之关联的分数,分数通常是浮动的数值,用于排序。Redis 会根据分数值对成员进行升序排序。 * 有序性:ZSet 内部元素会根据分数(score)进行自动排序,成员可以通过分数排名进行快速查找。
10 min read
Redis数据库—— Hash(哈希)的扩容机制(rehash)
Redis

Redis数据库—— Hash(哈希)的扩容机制(rehash)

大家好,这里是编程Cookbook。详细介绍 Hash(哈希)的扩容机制( rehash )、源码、以及扩容和缩容过程。 Redis 的 Hash 类型是一个非常重要的数据结构,用于存储键值对的映射关系。它背后使用的是一种哈希表(hash table)结构,提供高效的 O(1) 时间复杂度进行插入、查找和删除操作。然而,当哈希表中的元素逐渐增多时,可能会触发哈希表的 扩容(rehash) 操作,以保证数据结构的高效性和性能。 Redis 字典(dict)结构 Redis 中的字典(dict)是一个使用哈希表实现的高效数据结构,它包含以下基本元素: * 键值对:每个元素是一个 key 和 value 的配对,Redis 通过哈希表将 key 映射到 value。
17 min read
Redis数据库——内存预分配
Redis

Redis数据库——内存预分配

大家好,这里是编程Cookbook。本文详细介绍Redis的内存预分配策略,在使用各数据结构类型时,内存是如何变化的,以及触发底层数据结构变化的条件。 Redis 的内存预分配策略是一种优化手段,用来 减少频繁的内存分配和释放操作对性能的影响。通过预先分配足够的内存,Redis 可以提高操作效率(在很多编程语言,如Go的切片,中都有实现),尤其是在高并发场景下。 什么是内存预分配? * 定义: Redis 在某些数据结构(如字符串、列表、哈希等)存储数据时,不是每次都按照精确的内存需求分配,而是会额外预留一部分内存空间。 * 目的: * 减少频繁的内存分配系统调用。 * 提高数据结构扩展时的性能。 * 降低内存碎片化的风险。 各数据结构的实现 Redis 的多个数据结构会使用内存预分配策略,包括: String(字符串) * 背景:Redis 的字符串类型基于 SDS 实现,支持动态扩容。 * 触发条件: * 当字符串长度超过当前分配的内存容量。 * 扩容策略:
9 min read
Redis数据库——内存分配器
Redis

Redis数据库——内存分配器

大家好,这里是编程Cookbook。本文详细介绍Redis数据库的内存分配器,这是redis为什么这么快的原因,以及其作为内存数据库的内存管理策略。 Redis 的内存分配器 Redis 的内存管理设计对性能和内存利用率有重要影响。其内存分配依赖底层的内存分配器和自身的一些优化机制。 内存分配器的作用 Redis 是一个基于内存的数据库,需要频繁地进行内存分配和释放操作。内存分配器的性能和设计直接影响 Redis 的整体性能。 * 内存分配器的主要职责: * 高效分配和释放内存。 * 尽量减少内存碎片。 * 提供线程安全的并发支持(多线程场景)。 Redis 支持的内存分配器 Redis 支持多种内存分配器,常见的有以下三种: 分配器 优点 缺点 使用场景 jemalloc 高性能、低碎片率、多线程支持【内存利用率高】 小对象(<4KB)分配速度略低于 tcmalloc Redis 默认,推荐使用 libc 简单易用,操作系统默认 性能和碎片控制较差 非高并发、低性能需求场景
9 min read
Redis数据库——8种内存淘汰机制
Redis

Redis数据库——8种内存淘汰机制

大家好,这里是编程Cookbook,关注公众号「编程Cookbook」,获取更多面试资料。本文详细介绍Redis的8种内存淘汰机制。 过期键删除策略 Redis 为管理内存,对设置了过期时间的键采用了以下三种删除策略: 1. 定时过期: * 描述:为每个设置了过期时间的键创建一个定时器,到达过期时间立即清除。 * 优点:对内存很友好,过期数据能及时清除。 * 缺点:需要消耗大量的 CPU 资源来处理定时器,影响缓存响应时间和吞吐量。 2. 惰性过期: * 描述:只有在访问某个键时才判断其是否过期,过期则清除。 * 优点:最大化节省 CPU 资源。 * 缺点:可能会有大量过期键未被访问而占用内存。 3. 定期删除: * 描述:每隔一定时间扫描 expires 字典中的部分键,清除过期键。 * 优点:折中策略,通过调整扫描时间间隔和
6 min read
Redis数据库——Redis雪崩、穿透、击穿
Redis

Redis数据库——Redis雪崩、穿透、击穿

大家好,这里是编程Cookbook。本文先简要介绍为什么需要使用Redis,以及过期键的删除策略,进而详细介绍Redis雪崩、穿透、击穿的发生场景和解决方案。 前情提要 为什么使用redis? 1. 提高性能:缓存査询速度比数据库查询速度快(内存Vs硬盘); 2. 提高井发能力:缓存分担了部分请求,支持更高的并发。 Redis 的过期键删除策略 Redis 为管理内存,对设置了过期时间的键采用了以下三种删除策略: 1. 定时过期: * 描述:为每个设置了过期时间的键创建一个定时器,到达过期时间立即清除。 * 优点:对内存很友好,过期数据能及时清除。 * 缺点:需要消耗大量的 CPU 资源来处理定时器,影响缓存响应时间和吞吐量。 2. 惰性过期: * 描述:只有在访问某个键时才判断其是否过期,过期则清除。 * 优点:最大化节省 CPU 资源。 * 缺点:可能会有大量过期键未被访问而占用内
6 min read
Redis数据库——数据结构类型
Redis

Redis数据库——数据结构类型

大家好,这里是编程Cookbook。本文详细介绍Redis 提供的5种基本数据结构类型和4种特殊类型,除此之外,还有8种底层数据结构,每种结构类型有其特点和适用场景。 基本数据类型 1. String(字符串) * 简介:Redis 最基本的数据类型,一个 key 对应一个 value,支持二进制安全,可存储任意数据(如图片、序列化对象)。 * 特点: * 最大可存储 512MB 数据。 * 用于缓存、计数器、分布式 ID 生成等场景。 * 常用命令: * 存储:SET key value、MSET key value [key value ...] * 获取:GET key、MGET key [key ...] * 计数器操作:INCR key、
20 min read