Year: 2024

9 Posts

DB-Cache 一致性问题
如何保证缓存和数据库一致性,这是一个老生常谈的话题了。 但很多人对这个问题,依旧有很多疑惑: 到底是更新缓存还是删缓存? 到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库? 为什么要引入消息队列保证一致性? 延迟双删会有什么问题?到底要不要用? … 引入缓存提高性能 我们从最简单的场景开始讲起。 如果你的业务处于起步阶段,流量非常小,那无论是读请求还是写请求,直接操作数据库即可,这时你的架构模型是这样的:…
Kafka learning 01
1. Kafka 的功能 Kafka 的核心功能如下: 消息引擎 - Kafka 可以作为一个消息引擎系统。 流处理 - Kafka…
代码设计
代码设计的目的:把复杂问题搞简单,而不是把简单问题搞复杂 数据结构和算法:大数据量的问题 设计模式或代码设计:复杂代码的问题 避免过度设计: 不要为了应用设计模式而应用 不以破坏代码可读性为前提 不要为了短期不存在的扩展而费神 持续重构优于提前设计
缓存击穿与缓存雪崩
刷帖子,看到有佬吐槽:某个业务缓存数据到期了本来只需要删除这个业务的数据就可以,但是同事把所有缓存数据都删除了,造成数据库宕机……有回复提到缓存击穿和缓存雪崩,于是就去查了资料,之前只是听说,也不知道具体是什么以及解决方法。 缓存击穿 概念 定义: 缓存击穿是指在高并发访问的情况下,某个非常热点的数据突然过期,导致大量请求在缓存中找不到数据,从而直接访问数据库,造成数据库压力瞬间增大。 发生原因: 热点数据过期。 高并发访问热点数据。 影响: 数据库承受大量突发请求,可能导致性能问题。…
MySQL 之索引
索引(Index)是帮助 MySQL 进行高效查询的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构是以某种方式引用(指向)数据,这样就可以在这些数据结构之上实现高级查找算法,这种数据结构就是索引。 索引结构 MySQL 的索引结构是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包含以下几种: 索引结构描述B+ Tree 索引最常见的索引类型,大部分引擎都支持 B+…
MySQL 之事务
事务是一组操作的集合,是一个不可分割的工作单元,同时是数据库操作的基本单元,这些操作要么同时成功要么同时失败。它用于保证数据操作的原子性、一致性、隔离性和持久性(ACID)。 事务案例 查看以下案例:张三需要向李四的账户转账一千元,这件事由多个部分组成: 查询张三的账户余额,确保有足够的金额可以转账。 SELECT money from account where name…
DI(依赖注入)
DI (Dependency Injection)依赖注入,即将组件的依赖关系外部化,而不是由组件内部创建和管理这些依赖。这样可以提高系统的可测试性、可维护性和扩展性。 例如,考虑以下 Go 代码,为 UserCache 组件创建一个 Redis 客户端…