Redis使用的注意事项
Redis 是一个使用内存保存数据的高性能 KV 数据库,它的高性能主要来自于:
1.简单的数据结构;
2.使用内存存储数据。
数据库可以分为执行器和存储引擎两部分,Redis 的执行器这一层非常的薄,所以 Redis 只能支持有限的几个 API,几乎没有聚合查询的能力,也不支持 SQL。它的存储引擎也非常简单,直接在内存中用最简单的数据结构来保存数据(Redis 的 LIST 在存储引擎的内存中的数据结构就是一个双向链表)。
Redis 牺牲了大部分功能,牺牲了数据可靠性,换取了高性能。
1,虽然说,Redis 支持将数据持久化到磁盘中,并且还支持主从复制,但,Redis 仍然是一个不可靠的存储,它在设计上天然就不保证数据的可靠性,所以一般我们都使用 Redis 做缓存,很少使用它作为唯一的数据存储。,
2,经典的缓存更新策略: Read/Write Through(先更新数据库再更新缓存),在并发的情况下,有一定的概率会出现“缓存的脏数据”问题,缓存中的数据可能会被错误地更新成了旧数据。(两个并发的写和读请求或另个并发的写请求,由于未按照预想的顺序执行,造成写入了脏数据)
3,Cache Aside(先更新数据库再删除缓存) 模式可以很好地解决这个问题,在大多数情况下是使用缓存的最佳方式(待深入研究)。,
4,缓存穿透指的是,在读数据的时候,没有命中缓存,请求“穿透”了缓存,直接访问后端数据库的情况。
我们需要预防的是,短时间内大量的请求无法命中缓存,请求穿透到数据库,导致数据库繁忙,请求超时。大量的请求超时还会引发更多的重试请求,更多的重试请求让数据库更加繁忙,这样恶性循环导致系统雪崩。
5,当发生缓存穿透时,如果从数据库中读取数据的时间比较长,也容易引起数据库雪崩。
6,为了避免雪崩,可以采用灰度发布的方式,先接入少量请求,再逐步增加系统的请求数量,直到全部请求都切换完成。如果系统不能采用灰度发布的方式,那就需要在系统启动的时候对缓存进行预热。
网友评论