基本原则

  • 只应将热数据放到缓存中

  • 所有缓存信息都应设置过期时间

  • 缓存过期时间应当分散以避免集中过期

  • 缓存key应具备可读性

  • 应避免不同业务出现同名缓存key

  • --->解决方法:  保证键名不冲突,也夹杂了一般在一个项目中怎样使用缓存,有几个供参考的方式:

      1. 当前参数,可以有几个拼接几个,这里只举了个uid,假如还有name, age等等,可以都放在后面,具体怎么弄看个人喜好或者代码规范;

      2. 当前方法名称,尽量接近当前方法名称,拼在缓存key中间;

      3. 当前项目名称作为前缀(可选),更安全;

      4. 所在项目组名称,再次作为前缀拼进来(一般用不到)。

      然后就是,在Model模型类中,先取缓存,取不到则读数据库,读到后不要忘了写入缓存,设置好过期时间等细节,就这么一个流程。

  • 可对key进行适当的缩写以节省内存空间

  • 选择合适的数据结构

  • 确保写入缓存中的数据是完整且正确的

  • 避免使用耗时较长的操作命令,如:keys *

    • Redis默认配置中操作耗时超过10ms即视为慢查询
  • 一个key对应的数据不应过大

    • 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优
    • hash类型,不应超过5000行
  • 避免缓存穿透

    • 数据库中未查询到的数据,可在Redis中设置特殊标识,以避免因缓存中无数据而导致每次请求均达到数据库
  • 缓存层不应抛出异常

    • 缓存应有降级处理方案,缓存出了问题要能回源到数据库进行处理
  • 可以进行适当的缓存预热

    • 对于上线后可能会有大量读请求的应用,在上线之前可预先将数据写入缓存中
  • 读的顺序是先缓存,后数据库;写的顺序是先数据库,后缓存

  • 数据一致性问题

    • 数据源发生变更时可能导致缓存中数据与数据源中数据不一致,应根据实际业务需求来选择适当的缓存更新策略:

      • 主动更新:在数据源发生变更时同步更新缓存数据或将缓存数据过期。一致性高,维护成本较高。

      • 被动删除:根据缓存设置的过期时间有Redis负责数据的过期删除。一致性较低,维护成本较低。

缓存过期算法

  • LRU

    • 淘汰最后使用时间距当前时间较长的数据
  • LFU

    • 淘汰某段时间内的使用频次较低的数据
  • FIFO

    • 淘汰先写入的数据

作者:雪飞鸿
链接:https://www.jianshu.com/p/7b0bf1cb59e2
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

redis设计原则的更多相关文章

  1. MySQL三层结构、用户权限、索引设计原则

    一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对 ...

  2. C#设计模式(0)——设计原则

    设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.在进行设计的时候,我们需要遵循以下几个原则:单一职责原则.开闭原则.里氏替代原则.依赖倒置原则.接口隔离原则 ...

  3. 探索Redis设计与实现2:Redis内部数据结构详解——dict

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  4. 设计原则:开闭原则(OCP)

    1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...

  5. 设计原则:里式替换原则(LSP)

    系列文章 设计原则:单一职责(SRP) 设计原则:开闭原则(OCP) 设计原则:里式替换原则(LSP) 设计原则:接口隔离原则(ISP) 设计原则:依赖倒置原则(DIP) 何谓高质量代码? 理解RES ...

  6. 「 MySQL高级篇 」MySQL索引原理,设计原则

    大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...

  7. Redis设计与实现

    简述Redis设计与实现 Redis是一个高性能的key-value的非关系型数据库,Redis是运行在内存中的一种数据库,但是它也可以持久化到磁盘中,Redis的实现有着更为复杂的数据结构并且提供对 ...

  8. 「MySQL高级篇」MySQL索引原理,设计原则

    大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...

  9. UML建模语言、设计原则、设计模式

    1.UML统一建模语言 定义:用于软件系统设计与分析的语言工具 目的:帮助开发人员更好的梳理逻辑.思路 学习地址:UML概述_w3cschool 官网:https://www.omg.org/spec ...

随机推荐

  1. Django建站+Vuejs前端

    第一节 @注意 千万注意格式.标签名字: 浏览器开发者模式修改页面不显示:在开发者模式下(F12进入),打开设置页面(F1),勾选 Disable cache (while DevTools is o ...

  2. webpack代理解决跨域问题

    new WebpackDevServer(webpack(config), { hot:hot, inline: true, compress: true, //去掉真实ip的检测 disableHo ...

  3. JdbcTemplate 多数据源 jdbc

    参考: https://www.cnblogs.com/tangzekai/p/7782773.html 配置: package top.zekk.twodatasource.config; impo ...

  4. HTTP 响应代码

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成.响应分为五类:信息响应, ...

  5. tomcat 配置细节

    1.对于url中文乱码问题: (有时进行url编码也不能能够解决,找到server.xml添加URIEncoding="UTF-8",就可以了) tomcat配置编码:      ...

  6. 解决easyUI中翻页后前面已钩选项自动变为未选择的问题

    在easyUI的datagrid中,必须在属性的第一条就要写 idField:'id' (只要创建数据表格,就必须要加idField),其中id是页面数据的主键名称. 这样设置之后,表格翻页之后,前面 ...

  7. 图解Windows 10下Visual Studio Code的下载和安装

    1. 百度搜索“Visual Studio Code”,如下图所示: 2. 点击第一个搜索结果项,进入官方网站,然后点击“Download for Windows”,如下图所示: 3. 进入提示下载页 ...

  8. React—Native开发之 Could not connect to development server(Android)解决方法

    作为初学者昨天还好好能跑的项目今天就会遇到突然爆红出错是经常的事,让我们来看下是什么错吧 先来翻译: 连接不到开发的服务器. 请按照以下的步骤来修复此问题: 确保包服务器在运行确保你的设备或者模拟器连 ...

  9. 将对象序列化成XML字符串

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. hibernate多生成一个外键以及映射文件中含有<list-index>标签

    (原文地址: http://blog.csdn.net/xiaoxian8023/article/details/15380529) 一.Inverse是hibernate双向关系中的基本概念.inv ...