如何使用缓存,怎么才能更加合理?今天的话题,结合我之前的项目场景,讨论下使用缓存合理性问题。

热点数据,缓存才有价值

对于冷数据而言,大部分数据可能还没有再次访问到就已经被挤出内存,不仅占用内存,而且价值不大。

对于热点数据,比如我们的某IM产品,生日祝福模块,当天的寿星列表,缓存以后可能读取数十万次。再举个例子,某导航产品,我们将导航信息,缓存以后可能读取数百万次。

频繁修改的数据,看情况考虑使用缓存

数据更新前至少读取两次,缓存才有意义。这个是最基本的策略,如果缓存还没有起作用就失效了,那就没有太大价值了。

对于上面两个例子,寿星列表、导航信息都存在一个特点,就是信息修改频率不高,读取通常非常高的场景。

那存不存在,修改频率很高,但是又不得不考虑缓存的场景呢?有!比如,这个读取接口对数据库的压力很大,但是又是热点数据,这个时候就需要考虑通过缓存手段,减少数据库的压力,比如我们的某助手产品的,点赞数,收藏数,分享数等是非常典型的热点数据,但是又不断变化,此时就需要将数据同步保存到Redis缓存,减少数据库压力。

数据不一致性

一般会对缓存设置失效时间,一旦超过失效时间,就要从数据库重新加载,因此应用要容忍一定时间的数据不一致。还有一种是在数据更新时立即更新缓存,不过这也会更多系统开销和事务一致性问题。

缓存更新机制

使用缓存过程中,我们经常会遇到缓存数据的不一致性和与脏读现象,我们有什么解决策略呢?

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

缓存可用性

缓存是提高数据读取性能的,缓存数据丢失和缓存不可用不会影响应用程序的处理。因此,一般的操作手段是,如果Redis出现异常,我们手动捕获这个异常,记录日志,并且去数据库查询数据返回给用户。

缓存服务降级

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

缓存预热

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

缓存穿透

如果因为不恰当的业务,或者恶意攻击持续地发请求某些不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至奔溃。一个简单的对策是将不存在的数据也缓存起来。

Redis实战(一) 使用缓存合理性相关推荐

  1. Redis实战之查询缓存

    Reids实战之查询缓存 对于一些不常变动却查询频率高的数据,对此进行数据库的访问会降低查询效率,此时可以使用redis缓存来解决,案例:查询商品信息 一 实现思路 可能出缓存穿透问题,以及缓存和数据 ...

  2. 怎么查询redis缓存的数据_阿里开发十年写出这份「Redis简明教程」+「Redis实战」请你查收...

    Redis是啥?用Redis官方的话来说就是: Redis is an open source (BSD licensed), in-memory data structure store, used ...

  3. Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!

    Redis基础篇 Java面试宝典-redis 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来 ...

  4. 黑马点评Redis实战(短信登录;商户查询缓存)

    黑马点评 通过一个类似于大众点评的项目了解学习redis在实战项目中的使用,下面是项目中会涉及到的模块: 一.导入黑马点评项目 导入springboot项目,导入sql脚本到数据库,开启nginx,更 ...

  5. 猿创征文 | 微服务 Spring Boot 整合Redis 实战开发解决高并发数据缓存

    文章目录 一.什么是 缓存? ⛅为什么用缓存? ⚡如何使用缓存 二.实现一个商家缓存 ⌛环境搭建 ♨️核心源码 ✅测试接口 三.采用 微服务 Spring Boot 注解开启缓存 ✂️@CacheEn ...

  6. 【Caffeine进阶】Redis+Caffeine 两级缓存实战,性能爆缸

    往期回顾 博主前面发过一篇[缓存框架Caffeine]初级篇,主要介绍了Caffeine的入门级使用!地址https://blog.csdn.net/Number_oneEngineer/articl ...

  7. Redis实战——缓存

    目录 1 前言 1.1什么是缓存? 1.2 缓存的作用及成本 1.3 Redis缓存模型 2 给商户信息添加缓存 3 缓存更新策略 3.1 更新策略介绍 3.2 主动更新策略 3.3 主动更新策略练习 ...

  8. 黑马Redis实战篇—给商铺类型缓存(练习)

    给商铺类型查询业务添加缓存 黑马点评P37集,给商铺类型业务添加缓存. 商铺类型是list类型,较36集需要一些改动. ShopTypeController @RestController @Requ ...

  9. Redis 实战笔记

    Redis yum源安装 yum install -y epel-release redis systemctl enable redis systemctl start redis systemct ...

  10. SpringBoot2.x整合Redis实战 4节课

    1.分布式缓存Redis介绍      简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/download           2.新 ...

最新文章

  1. mysql h 127.0.0.1_MySQL 连接时尽量使用 127.0.0.1 而不是 localhost
  2. leetcode算法题--数组中数字出现的次数 II
  3. C/C++还能混合编程
  4. c++中的lambda特性
  5. Linux 内核顶层Makefile 详解
  6. 201673020127 词频统计软件项目报告
  7. js与jquery操作
  8. 【Python笔记】Python/C++解决约瑟夫环问题
  9. 计算机毕业设计-JSP+Servlet网上会议室预约系统-JavaWeb会议室预约系统
  10. TI C64X+通用库函数使用手册
  11. 利用网线实现电脑间超大文件传输
  12. 基于Python的淘宝用户行为数据分析
  13. Python 给图片加文字或logo水印(附代码) | Python工具
  14. 基于seq2seq自动生成小说
  15. 【MOS管电平转换电路的一点思考】
  16. PMP之项目采购管理
  17. H-A + B用于投入产出实践(VIII)
  18. 数据库管理工具哪个好?强力推荐Navicat Premium 16 mac中文版
  19. 2022杭电多校4 G - Climb Stairs
  20. 嵌入式Linux开发

热门文章

  1. 百度团购导航的服务态度,真让我无语了
  2. python离群点检测_包会!手把手教你机器学习(零基础)之异常点检测
  3. spring 项目集成ActiveMQ
  4. Kotlin中的高阶函数(一等公民)
  5. 安卓开发学习笔记01_布局
  6. 16x16点阵c语言程序的十六进制,16X16点阵C语言程序(16X16 bitmap C language program).doc...
  7. python解析html (bs4 lxml)
  8. es6与java的相似度_计算两个特征向量相似度的插件(es6.1.1-6.3+)
  9. Android Studio 结合Git的使用(二)
  10. 白糖期货上涨可能带动的股票