分布式缓存-Redis
为什么这么快?
纯内存
单线程,避免了多线程上下文切换
IO多路复用
应用场景
setnx实现分布式锁
zset实现延时队列
如订单超时未支付,取消订单,恢复库存。
生产者:新下的订单放入延时队列,score为到期处理时间。
消费者:用一个线程轮询延时队列,判断当前时间是否超过到期时间,若超出,则从队列中删除订单。
过期策略
定时
定期
惰性
redis:定期+惰性
内存淘汰机制
noeviction
allkeys-lru
allkeys-random
volatile-lru
volatile-random
votatile-ttl
持久化
底层数据结构
渐进式rehash
传统的hash表在扩容迁移数据(rehash)时,如果hash表数据量很大,一次性拷贝到新表中,务必耗费很长时间。
何为渐进式rehash? 就是把拷贝节点数据的过程平摊到后续的操作中,而不是一次性拷贝。
缓存雪崩、缓存穿透、缓存击穿
「其他文章」
- API 文档简洁之美,只需三步开启
- Kotlin 和 Jetpack 视频合集 | MAD Skills
- 实战 Java 16 值类型 Record - 1. Record 的默认方法使用以及基于预编译生成相关字节码的底层实现
- 优先使用 KTX 库 | MAD Skills
- 实操搭建企业级Harbor v1.10.6
- 推荐一个开源文件管理系统,简单好用
- 一文搞懂MySQL体系架构!!
- 使用Documentfragment优化DOM操作
- 深入理解浏览器缓存机制
- 百度搜索与推荐引擎的云原生改造 | Geek大咖说第一期
- 聊聊LiteOS事件模块的结构体、初始化及常用操作
- 从零搭建自己的社区系统,这个开源项目值得拥有
- 茫茫内存,我该如何用 windbg 找到你 ?
- Java中对象的生与灭- 核心篇
- 使用JavaScript学习设计模式
- 一文带你剖析LiteOS互斥锁Mutex源代码
- 小胖问我:MySQL 事务与 MVCC 原理?
- 免费正版 IntelliJ IDEA license 详细指南
- 纯函数是什么?怎么合理运用纯函数?
- 聊聊dddsample-core的Specification