缓存穿透
数据访问有高、低频之分。我们一般把高频数据放在redis中,所谓的缓存穿透就是一个数据在redis中没查看,得到Mysql中查。那这种现象能否避免吗?肯定不能。但是我们可以避免高频的缓存穿透。
1.布隆过滤器:
1.1.布隆过滤器干什么的?解决内存紧张。
1.2怎么实现:不存数据值,用bitmap标识数据。
1.3过程:
1.4错误率,哈希碰撞:
1.5遇到这种情况怎么办?
2.缓存雪崩
3.分布式锁
3.1分布式锁的应用条件
3.2 mysql分布式锁
3.3死锁的应对redission
4. Zookeeper分布式锁
4.1存储数据,fs
4.2创建多种类型的目录:
4.3事件回调机制:
解决内存紧张的问题的通用方法就还是,过滤器。著名的有布隆过滤器。
1.布隆过滤器:
1.1.布隆过滤器干什么的?解决内存紧张。
1.2怎么实现:不存数据值,用bitmap标识数据。
数组标识数据,以前是id(int就4个字节),现在是1bit。
1.3过程:
1)client. id来了一个id请求 2)d进行hash 计算得到值 3)用计算后的值到数组中查询
1.4错误率,哈希碰撞:
id=10 哈希后的值可能是:3
id=100 哈希后的值可能是:3
不同id哈希后值可能都一样。这就是哈希碰撞。
1.5遇到这种情况怎么办?
解决方法1:加大数组的长度
解决方法2:增加哈希函数的个数
缓存穿透有两种极端的形式:
缓存击穿:一条数据当掉
缓存雪崩:所有数据当掉
2.缓存雪崩
2.1缓存雪崩,就是redis中存了大量的热门数据,突然一个时刻,集中失效。
2.2应对 方法1:给每条数据设置一个随机的有效期,比如0.5个小时,半天,一个月。这个可以设置的。
方法2:用副本或者切片的方式存储。
副本:就还是多存几个一样的。
切片:就是把一个整体分块存。
3.分布式锁
高频访问就不得不说锁了。
分布式就应用了分布式锁。
分布式一致性服务(多台,节点)。
一致性:多台拿到的数据都是一样的。
3.1分布式锁的应用条件
a) 共享资源 b)资源互斥 c)多任务场景
3.2 mysql分布式锁
a)锁是什么:外部的锁,锁就是一个值。
b)过程:先插值,谁先插入,代表谁抢到了锁,jvm1抢到,插入后,再把锁释放。
c)死锁:JVM1当机了,永远不会释放锁。
怎么办:redis分布式锁,有超时时间。( redission )
3.3死锁的应对redission
超时时间的设置。
4. Zookeeper分布式锁
4.1存储数据,fs(命令行下回写个详解)
存储数据,文件系统的格式:创建、删除 。
查看根目录:
删除文件 rmr/msp
创建:create /msb 999
查看: ls
创建:create /msb/tmp 888
查看: ls/msb 文件夹 get/msb/tmp
4.2创建多种类型的目录:
zookeeper维护的是全局,有顺序,唯一的目录。
a)持久目录:创建全局有顺序的 create -s /msb/iii 666
b)临时目录 创建临时有顺序的 create -e -s /msb/iii 666
4.3事件回调机制:
a)client可以注册事件 msb注册了一个事件;何时触发 ; 触发调用的是回调函数
a).事件谁注册:client注册:目录注册事件
b).事件触发:谁设置,谁触发;client触发,目录触发响应
c).触发之后谁来运行,client 上回调函数运行
注意:谁注册-谁触发