缓存技术常见问题 && Redis缓存并发问题
Redis常见的问题有 雪崩、穿透和击穿
Redis的作用:访问量多但数据变化少,热点数据;session缓存数据;
Redis缓存雪崩:高并发请求时,一旦Redis缓存库发生崩溃,则大量的请求就会转向SQL数据库的访问,这个时候数据库一下子就会发生高负载蹦死。
Redis雪崩解决方案:ehcache缓存 + Redis + 限流组件
缓存穿透
缓存穿透:数据库中的数据没有数据,缓存中不记录保存,这时请求发向数据库中,有可能把数据库打死。
解决方案:请求时,数据库中查无数据,将空数据设定自定义标志词记录在Redis缓存中。这样会有效避免问题。
缓存击穿
缓存击穿就是当具体某点Key失效时发生的SQL数据库打死
Redis缓存并发问题
问题场景:用户更新数据库,在并发写入Redis缓存时(由于Redis是单线程,并发是发生在程序中),本来先到的数据却后到了,导致Redis缓存最新数据是后到的数据,造成脏读。
解决方案:方案原理 有类似SQL的乐观锁机制 。解决途径是 在并发写入Redis缓存时,用要写入数据的版本号和时间戳 与 Redis中的数据进行对比,如果写入的数据时间戳或者版本号 比Redis 高,则写入Redis中;否则就不写入。
Redis优点
纯内存操作,效率较高。还能集群。