李歘歘的朋友圈

李歘歘的朋友圈

专注于计算机知识分享

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
MySQL数据库——常见的几种锁分类
MySQL

MySQL数据库——常见的几种锁分类

大家好,这里是编程Cookbook。本文详细介绍MySQL的几种常见锁分类,如:表级锁、行级锁、页面锁、悲观锁、乐观锁、共享锁、排他锁、Gap-锁等。 按锁粒度分 表级锁 * 开销小,加锁快,不会出现死锁,锁粒度大(整张表)。 * 并发度低,发生锁竞争概率大,适合查询。 行级锁 * 开销大,加锁慢,会出现死锁,锁粒度最小(一行数据)。 * 并发度高,发生锁竞争概率小,适合并发写,事务控制。 页面锁 * 开销、加锁速度、锁粒度、并发度都介于表级锁和行级锁之间,会出现死锁。 总结 很难说哪种锁更好,只能根据具体应用程序的特点选择合适的锁。 * 对于查询远大于修改的场景,表级锁是合适的,因为锁粒度大但管理简单。 * 对于并发查询并发更新少量数据的应用,行级锁是更合适的选择,它提供更高的并发性和灵活性。 InnoDB的默认锁是行级锁,但通过意向锁机制实现了多粒度锁的协同工作。 锁与索引关系
15 min read
MySQL数据库——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)
MySQL

MySQL数据库——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)

大家好,这里是编程Cookbook。本文详细介绍MySQL数据库重要的存储引擎及其适用场景:InnoDB、MyISAM、MEMORY、ARCHIVE。 MySQL的存储引擎(Storage Engine)是用于管理数据存储和数据访问的程序模块。常用的存储引擎有 InnoDB(事务处理和高并发,默认存储引擎)、MyISAM(高查询性能,但不支持事务)、Memory(高速缓存)等。 * InnoDB:适用于大多数业务场景,提供事务、行级锁和外键支持,是MySQL的默认存储引擎。 * MyISAM:适用于读多写少、对事务一致性要求不高的场景。 * MEMORY:适用于需要高速缓存的场景,但数据会在数据库重启时丢失。 * ARCHIVE:适用于存储大量归档数据,不支持更新操作。 * CSV:适用于导出和交换数据的场景,数据以CSV格式存储。 * NDB (Cluster):适用于分布式、高可用性和高扩展性的场景,通常用于MySQL Cluster。 * FEDERATED:适用于跨数据库查询,允许访问远程数据库中的数据。 * BLACKHOLE:适用于数据复制,
11 min read
MySQL数据库——数据库三范式
MySQL

MySQL数据库——数据库三范式

大家好,这里是编程Cookbook。本文简要介绍关系型数据库设计的三范式。 数据库的三范式(3NF)是关系数据库设计中用于减少数据冗余、避免数据异常和提高数据一致性的三种规范化标准。 以下是 第一范式(1NF)、第二范式(2NF) 和 第三范式(3NF) 的详细介绍: 范式 第一范式(1NF) 要求每一列都是不可拆分的原子项。 第二范式(2NF) 第二范式要求属性完全依赖于主键,而不能只依赖于主键的一部分。满足 第一范式 的基础上,解决部分依赖(Partial Dependency)的问题。 * 关系必须满足 第一范式。 * 消除部分依赖:对于复合主键(即由多个列组成的主键),非主属性必须依赖于整个复合主键,而不是依赖于主键的一部分。 订单表中出现业务线,不同业务线的订单价格不同,那么主键就必须是订单id和业务线id(完全依赖)。 第三范式(3NF) 第三范式要求属性直接依赖于主键,不依赖于通过其他非主属性间接依赖于主键。 * 关系必须满足 第二范式。 * 消除传递依赖:任何非主属性都不能通过其他非主属性间接依赖
3 min read