秒杀项目
查询优化技术之多级缓存
多级缓存的定义
缓存设计
用快速存取设备、用内存
将缓存推到离用户最近的地方
脏缓存清理
redis缓存、本地缓存
单机版:
sentinal 哨兵模式
集群cluster模式
Redis集中式缓存商品详情页接入
Redis集中式缓存压测
类别 | TPS | 反应时间(毫秒) | %CPU |
---|---|---|---|
redis集中式缓存 | 2000 | 245 | 2% |
本地缓存
热点数据
脏读非常不敏感
内存可控
Guava cache
优点:
可控制的大小和超时时间
可配置的LRU策略
线程安全
本地缓存压测
线程数1000 、5秒发起、循环20次
类别 | TPS | 反应时间(毫秒) | %CPU |
---|---|---|---|
Gvaua本地缓存 | 3500 | 38 | 2% |
热点nginx lua缓存和proxy cache缓存
nginx proxy cache缓存
缓存的条件:
1、nginx反向代理前置
2、依靠文件系统存索引级的文件
3、依靠内存缓存文件地址
设置步骤;
在nginx.conf文件中
proxy_cache_path /usr/local/nginx/nginx/tmp_cache levels=1:2 keys_zone=tmp_cache:100m inactive=7d max_size=10g;
proxy_cache tmp_cache;
proxy_cache_key $uri;
proxy_cache_valid 200 206 304 302 7d;
nginx proxy cache缓存压测
线程数1000 、5秒发起、循环20次
类别 | TPS | 反应时间(毫秒) | %CPU |
---|---|---|---|
本地缓存 | 2800 | 245 | 2% |
效果不好。
nginx lua缓存
lua协程机制
协程:线程空间栈里的一个执行单元,有独立的运行空间,基于用户态模拟出来,本身依托于线程,被CPU执行
1、依附于线程的内存模型,切换开销小
2、遇阻塞即归还执行权,代码同步