高并发下redis
一般有
- 缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
- 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
- 缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
尽量多集群分开,目前大多采取微服务架构,各服务单独部署,对缓存的使用或依赖情况各不相同,若使用统一的redis集群,就会出现,高并发访问,key大量过期,可能A服务的不可预测的redis操作对B服务实时响应造成影响,本来只是后端边缘服务的一点操作引发了前端高并发的服务。
避免大key,redis保存用户session,或一类活动的记录直接使用redis的set list hash 结构 或string 直接保存base64编码的视频,导致key的存储过大,若过多这种key会导致redis 吞吐量下架,在数据过期进行清除时,redis的cpu过高,导致查询延时或中断,还找不到原因。
系统会设置缓存的过期时间,一般会在系统内定义几个时间魔数,设置时直接使用,可以在设置时加下随机数防止 批量过期。
需要查看命中率 ,关注hot key 通过本地缓存或 加后缀等方式 (key_1) 减少单key单台机子的访问量.