启动了2--8,但是7和8没报错,后台运行只运行了2--6
[root@localhost~]#dockerstartredis-nade-2
redis-nade-2
[rootalocalhost~]#dockerstartredis-nade-3
redis-nade-3
rootalocalhost~]#dockerstartredis-nade-3
redis-nade-3
[root@localhost~]#dockerstartredis-nade-4
redis-nade-4
[root@localhost~]#dockerstartredis-nade-5
redis-nade-5
[rootalocalhost~]#dockerstartredis-nade-6
redis-nade-6
[root@localhost~]#dockerstartredis-nade-7
redis-nade-7
[root@localhost~]#docker startredis-nade-8
redis-nade-8
[root@localhost~]#dockerps
IMAGE COMMAND CREATED STATUS PORTS CONTAINER ID NAMES
"docker-entrypoint.s. 19 hours 007e97176c40 redis:6.0.8 Up7seconds ago redis-nade-6
redis:6.0.8 "docker-entrypoint.5. 19 hours Up9 4f418f8aec24 seconds aq0 redis-nade-5
"docker-entrypoint.S." Up 1e 47a460ccf600 redis:6.0.8 19 hours seconds aq0 redis-nade-4
redis:6.0.8 "docker-entrypoint.s' 19 hours c4f77bd739d5 Up 13 seconds agc redis-nade-3
redis:6.0.8 "docker-entrypoint.s' 19hours 14 968C86257986 ago Up seconds redis-nade-2
f365ca153590 "docker-entrypoint.S. redis:6.0.8 20 hours Up 33 seconds ag0 redis-nade-1
缓存雪崩就是 指缓存由于某些原因(比如 宕机、cache服务挂了或者不响应)整体crash掉了,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。
缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。
如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。
设置热点数据永远不过期。
保证缓存层服务高可用性
对缓存访问进行 资源隔离、降级
Redis数据备份和恢复
快速缓存预热
对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。
黑客发出的那 4000 个攻击,缓存中查不到,每次你去数据库里查,也查不到。
举个栗子。数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。
,每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN。然后设置一个过期时间,这样的话,下次有相同的 key 来访问的时候,在缓存失效之前,都可以直接从缓存中取数据。
缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。
解决方式也很简单,可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,进而其它请求才能通过该 key 访问数据。
缓存并发竞争