分布式场景下缓存引发的问题及解决方案

在分布式场景下,为应对高流量冲击,减轻数据库压力,我们大都会通过缓存来应对流量冲击,常见的缓存中间件如Redis、Memcache等,缓存也会带来一定的问题,如下:
1.缓存穿透:指缓存中没有数据,数据库中也没有数据。在进行数据的访问时,通过数据的key读取数据,但是该key对应数据在数据库中没有,在缓存中也没有,造成每次通过该key读取数据都会进行数据库操作,且每次读取都为null的情况。在大型项目中,这种无效的数据库操作会增加数据库的读压力。
解决方案:空值缓存、布隆过滤。
2.缓存击穿:指定key的数据在数据库中存在,但是缓存中还没有写入该key对应的数据,在高并发场景下,多个线程同时通过该key读取数据时,会因为高并发访问的原因导致同一个key对应的数据会从数据库被多次读取。
解决方案:上锁、singleflight回源操作。
3.缓存雪崩:缓存服务不具备高可用性导致大面积缓存失效的情况。
解决方案:集群,服务熔断,降级,预热,间隔更新缓存。
4.数据一致性:数据进行更新时,如何对数据进行操作才能保证数据库中的数据和缓存中的数据一致的问题。
解决方案:先更缓存再更新数据库,先更新数据库再更新缓存,先删除缓存再更新数据库,先更数据库再删缓存,先删缓存再更新数据库再删缓存,串行操作。

你可能感兴趣的:(缓存数据库后端)