1.1 缓存使用场景
- 1) 访问量很大的时候,DB数据在磁盘上。如果加入缓存,可以先去缓存读,如果没有再去DB读。可以减轻访问压力Redis没有锁,单线程、单进程。读11w / s, 写 8万 /s
- 2) 做Session分离
- 在各个Tomcat间复制
- 3)做分布式锁
- 4)做乐观锁
1.2 缓存的概念
缓存是在CPU上的高速存储。
- 前端也可以缓存。
- 浏览器缓存 (离线浏览,浏览器内部有缓存)
- APP缓存,(图片,SQLite)
- 网络端缓存 (Ningx)
- 边缘缓存
2.4 Lua与Redis
Lua是一个脚本语言。可以嵌入程序中。在Nginx上使用lua来实现高并发。Lua可以直接运行Redis。
4.2 缓存穿透
如果缓存里面没有,则去数据库。这个现象是缓存穿透。
- 可以对不存在的Key设置默认值,加入缓存
- 布隆过滤。Bloom Filter。hash函数多,数组长度长则hash碰撞概率小。如果没有的话则打回。Bloom Filter 在Redis之前。(Bloom 要与DB同步)
1)雪崩
大量Key都失效。一下给数据库带来很大压力。
- 可以的失效期分散一些
- 设置二级缓存(数据不一定一致)
- 高可用(可能是脏读。主从模式)
2)缓存击穿
Key有,但是访问量很大。某个热点Key失效了。
- 用分布式锁,控制访问量
- 不设超时,会造成一致性问题
4.3 缓存问题,数据不一致
update db数据但没update,删除redis,高并发时候又有请求,把旧数据又读出来了。
- 延时双删,更新时候删一次,两秒后再删一次
- 设置缓存过期时间10s
- 将删除缓存失败记录日志里面,然后用脚本删除
4.4 并发竞争
多个客户端set 同一个key。
标签:缓存,Redis,DB,学习,Lua,Key,Bloom From: https://www.cnblogs.com/ylxn/p/18090170