高并发与缓存

本文主要讲述高并发下缓存会出现的问题。

在高并发下,缓存会出现的问题有:缓存一致性、并发问题、穿透问题、缓存的雪崩问题。

缓存一致性

现象:
在使用缓存的时候,会要求缓存与数据库的一致性。

解决:在使用spring data JPA和spring data redis时,使用@Transcational来保证数据库和redis中的数据一致。

缓存并发

现象:
在多个连接读取缓存数据时,存在若干个连接要写入到缓存。

解决:redis是单线程、原子性的,所以其每一个操作都是原子性的。而spring data中的redis是用过线程池来控制的。

缓存穿透

现象:
如果某一个key在高并发下被大量访问,但是缓存中此时没有这个值,那么就会去数据库中访问,从而导致对数据库造成重大的冲击。

解决:缓存特定的空对象,如id=null的对象为数据库中也没有的对象,而查询结果为null的对象没有缓存到redis中的对象。

缓存雪崩

现象:

  1. 由于缓存的原因,导致大量请求访问到后端数据库,从而造成数据库崩溃等。
  2. 在某个时间点,系统的缓存集中性的失效,也会导致系统崩溃。

解决:参见以上各种。而针对于缓存集中性的失效,可以采用redis的缓存失效策略LRU和LFU等。

你可能感兴趣的:(高并发与缓存)