Redis 是一个高性能的内存键值数据库,支持多种数据结构,并以其快速响应和简单性著称。在实际生产环境中,Redis 的 Lua 脚本功能因其原子性和灵活性被广泛应用。本文将详细分析 Redis 和 Lua 脚本相关的核心概念,并通过模拟面试官的层层“拷问”逐步深入,探讨如何编写 Lua 脚本以及实现原子性的关键机制。
Elasticsearch 提供了丰富的字段类型(Data Types)来满足不同场景的数据存储和查询需求。以下是主要字段类型的分类及详细说明,结合典型使用场景给出建议。 数据类型分类:核心数据类型(Core Data Types)复杂数据类型(Complex Data Types)地理数据类型(Geospatial Data Types)特殊用途类型(Specialized Data Types)
在编写 SQL 查询时,了解 SQL 语句的执行顺序非常重要。SQL 语句的书写顺序和实际执行顺序并不一致,掌握执行顺序有助于我们写出高效、正确的查询语句,并更好地理解查询的底层逻辑。本文将详细总结 SQL 语句关键字的执行顺序,并解释每个步骤的作用。
想来想去,怎么才能把事务的原理彻底的捋清楚呢?最后决定从版本链入手。先解释一下版本链的含义:对于一条记录来说,每一次变更都是一个新的版本,将每一个版本按照变更的先后顺序连起来,就形成了一个版本链,链表的头部是最新的旧记录,链表尾部是最早的旧记录。
在Redis中执行Lua脚本有两种方法:eval和evalsha。这两种方法的区别在于,是否要事先上传到reidis服务端,其中,eval不需要事先上传到服务端,而evalsha要将Lua脚本加载到Redis服务端。
文章主要介绍了使用 MySQL 时容易踩的 15 个坑,包括查询不加 where 条件、未使用索引、不处理 NULL 值、选错数据类型、深分页问题、未用 explain 分析查询、字符集设置不当、SQL 注入风险、事务问题、校对规则问题、过多使用 SELECT *、索引失效、频繁修改表或数据、未定期备份、忘了归档历史数据,并针对每个问题给出正例和反例,还提供了一些优化建议和解决办法。
本文主要介绍了 MySQL 中 InnoDB 的逻辑存储结构,包括两层架构、多种存储引擎(如 MyISAM 和 InnoDB)的特点与对比,InnoDB 将数据划分为页以提升性能,其逻辑存储结构包含表空间、段、区、页、行等。页又有文件头部、页面头部等部分,行有隐藏字段和不同行格式,还讲解了记录在页中的存储、页目录等相关内容。
本文深入介绍了 Redis 的多种底层数据结构,包括全局哈希表、SDS、双向链表、压缩列表、整数集合、跳表、listpack、quicklist 等,还阐述了 HyperLogLog 算法及其存储结构、计数缓存、源码解析,以及 GEO 的编码方式、与 zset 的关系等。
秒杀是一个非常典型的活动场景。比如双11、618等电商活动中,都会有秒杀的场景。秒杀场景的业务特点是限时限量,业务系统要处理瞬时的大量高并发操作,而Redis就经常被用来支撑秒杀活动。本文介绍了 Redis 支撑秒杀场景,包括秒杀活动对系统的要求,如瞬时并发访问量高、读多写少。阐述了基于原子操作和分布式锁支撑秒杀场景的方法,如原子操作通过 Lua 脚本实现,分布式锁需确保命令原子性及考虑多种情况,还对比了两种方式的优缺点。
本文解析了数据库事务的隔离级别与并发问题,包括排他锁、共享锁、范围锁等,介绍了脏读、不可重复读、更新丢失、幻读、写偏斜等现象,以及未提交读、已提交读、可重复读、串行化这四种隔离级别及其特点和实现方式。