使用缓存合理性

使用缓存的时机

image_1be4hcag41obf1613bofv2d11081j.png-18.2kB

热点数据

对于冷数据而言,读取频率低,大部分数据可能尚未再次访问到就已经被挤出内存,不只占用内存,并且价值不大。
对于热点数据,读取频率高。若是不作缓存,给数据库形成很大的压力,可能被击穿。

修改频率

数据更新前至少读取两次,缓存才有意义。这个是最基本的策略,若是缓存尚未起做用就失效了,那就没有太大价值了。(读取频率>修改频率)

若是这个读取接口对数据库的压力很大,可是又是热点数据,这个时候就须要考虑经过缓存手段,减小数据库的压力,好比咱们的某助手产品的,点赞数,收藏数,分享数等是很是典型的热点数据,可是又不断变化,此时就须要将数据同步保存到Redis缓存,减小数据库压力

缓存更新机制

通常状况下,咱们采起缓存双淘汰机制,在更新数据库的时候淘汰缓存。此外,设定超时时间,例如30分钟。极限场景下,即便有脏数据入cache,这个脏数据也最多存在三十分钟。

在高并发的状况下,设计上最好避免查询Mysql,因此在更新数据库的时候更新缓存。

缓存可用性

缓存是提升数据读取性能的,缓存数据丢失和缓存不可用不会影响应用程序的处理。所以,通常的操做手段是,若是Redis出现异常,咱们手动捕获这个异常,记录日志,而且去数据库查询数据返回给用户。

服务降级

服务降级的目的,是为了防止Redis服务故障,致使数据库跟着一块儿发生雪崩问题。所以,对于不重要的缓存数据,能够采起服务降级策略,例如一个比较常见的作法就是,Redis出现问题,不去数据库查询,而是直接返回默认值给用户。

对于可用性、服务降级实际状况

在大公司,redis都是codis集群,通常整个codis是不会挂掉的。因此在程序代码上没去实现可用性、服务降级。(不知我说的对不对,你们参考就好)redis

缓存预热

在新启动的缓存系统中,若是没有任何数据,在重建缓存数据过程当中,系统的性能和数据库复制都不太好,那么最好的缓存系统启动时就把热点数据加载好,例如对于缓存信息,在启动缓存加载数据库中所有数据进行预热。通常状况下,咱们会开通一个同步数据的接口,进行缓存预热。sql

相关文章
相关标签/搜索