>[success] **缓存数据分层**
>
热频数据
冷频数据
>[success]**缓存问题**
>>**缓存穿透**: 缓存穿透是指查询的key不存在,从而缓存查询不到而查询了数据库。若是这样的key恰好并发请求很大,那么就会对数据库造成不必要的压力。比如黑客用一堆不存在的key访问数据,大量请求发送到数据库,数据库压力过大而宕机.
>>>>[danger]解决方法:
1、把所有存在的key都存到另外一个存储的Set集合里,查询时可以先查询key是否存在;
2、将这些key对应的值设置为null 丢到缓存里面去。后面再出现查询这个key 的请求的时候,直接返回null,再根据业务需求设置过期时间。
3、BloomFilter 类似于一个hbase set 用来判断某个元素(key)是否存在于某个集合中。这种方式在大数据场景应用比较多,比如 Hbase 中使用它去判断数据是否在磁盘上。这种方案可以加在第1/2种方案中,在缓存之前加一层 BloomFilter ,在查询的时候先去 BloomFilter 去查询 key 是否存在,如果不存在就直接返回,存在再走查缓存 -> 查 DB。
>>**缓存击穿**
在高并发的系统中,大量的请求同时查询一个 key 时,这个key刚好失效了,就会导致大量的请求都打到数据库上面去。这种现象我们称为缓存击穿。
>>>>[danger]解决方法:在第一个查询数据的请求上使用一个 互斥锁。其他的线程进入等待状态,等第一个线程查询到了数据,然后做缓存。后面的线程进来发现已经有缓存了,就直接走缓存。
>[success]缓存设计思考
制定缓存策略
区分缓存数据
避免缓存问题
- 序言
- 为什么要编码规范?
- 如何进行编码规范?
- 编码规范宏观微观细节
- PHP编码规范
- 基础规范
- 1 语法规范
- 2 变量命名规范
- 3 常量命名规范
- 4 类命名规范
- 5 函数命名规范
- 6 方法命名规范
- PSR-规范
- 基本代码规范
- Tp项目规范
- TP命名规范
- Tp目录规范
- Tp基础目录构架
- Tp项目开发思考
- Tp控制器规范
- 控制器构架
- Tp模型规范
- 模型性能优化
- Tp业务规范
- 返回结构规范
- 业务异常规范
- Tp输出规范
- Restful API
- 模板渲染输出
- Tp异常规范
- 异常码状态码
- 异常输出方式
- Tp验证规范
- Tp路由规范
- Tp加密规范
- Password Hashing
- Tp缓存规范
- 常见数据缓存
- 缓存设计思考
- Tp日志规范
- 日志信息
- 日志分析
- Tp日志接管分析
- Tp性能优化
- vendor包规范
- 项目自动化思考
- 项目检测告警思考
- 项目注释规范
- Mysql设计规范
- 序言
- 命名规范
- 表及字段规范
- 索引规范
- 索引原理
- Sql规范
- 事务规范
- 读写分离
- 乐观锁悲观锁
- 数据库审计
- 性能优化
- 查询优化神器
- 慢查询优化步骤
- 分库分表、分区表
- 根据sql日志筛选数据
- 设计原则
- MongoDB规范
- MongoDB基础
- MongoDB设计
- MongoDB安全性
- MongoDB备份
- 操作手册规范
- API文档说明规范
- 管理端操作手册
- 用户使用说明书
- 溯源项目构想