
终于迎来了Redis系列的尾声,本文针对Redis常遇到的热Key,大Key,并发竞争解决方案进行介绍。
什么是热key?当一个key的访问量明显大于其他key的时候,他就可以被称为热key。
解决办法:
什么是大Key?(Redis客户端提供了bigkeys命令来查找大key)
删除大key时会造成阻塞,怎么删除大key?
多个客户端同时并发写一个key,本来应该先到的操作,因为某些原因后到了,导致数据出错。
解决方案:
1.利用分布式锁,确保同一时间只有一个系统再操作某一个Redis Key ,其他系统不能操作
2.利用时间戳,当时间戳最新时修改Redis key ,当时间戳比较旧时,忽略操作。
ZooKeeper 可以看成是树状结构,它的节点是znode
惊群效应就是,给一堆睡觉的鸟群(羊群、牛群都行,随你高兴)中,扔一颗石子,结果就是会惊醒这一群的鸟,这就是所谓的惊群效应。
对应到并发编程中,当多个线程阻塞到相同资源上(比如锁)时,当这个资源ready后,资源就绪的信号唤醒了所有阻塞到这个资源上的所有线程。
在并发编程中,当有多个线程/进程争抢同一资源,因资源不足而被阻塞的时,当阻塞事件解除后,如果唤醒了所有阻塞在该事件上的所有线程/进程,那就触发了惊群效应。
ZooKeeper利用临时顺序节点解决高并发中的惊群效应,步骤如下:

1.创建临时的顺序节点
2.判断是不是最小节点
3.是最小的,获得锁,否则监听上面的节点
4.释放锁后,后面的监听节点处理
这个朋友写的非常好,实现的过程我就不在这里叙述了[PHP+zookeeper实现分布式锁,点击跳转]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。