redis设计原则
基本原则
只应将热数据放到缓存中
所有缓存信息都应设置过期时间
缓存过期时间应当分散以避免集中过期
缓存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设计原则的更多相关文章
- MySQL三层结构、用户权限、索引设计原则
一.守护进程是什么? Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对 ...
- C#设计模式(0)——设计原则
设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.在进行设计的时候,我们需要遵循以下几个原则:单一职责原则.开闭原则.里氏替代原则.依赖倒置原则.接口隔离原则 ...
- 探索Redis设计与实现2:Redis内部数据结构详解——dict
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- 设计原则:开闭原则(OCP)
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...
- 设计原则:里式替换原则(LSP)
系列文章 设计原则:单一职责(SRP) 设计原则:开闭原则(OCP) 设计原则:里式替换原则(LSP) 设计原则:接口隔离原则(ISP) 设计原则:依赖倒置原则(DIP) 何谓高质量代码? 理解RES ...
- 「 MySQL高级篇 」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- Redis设计与实现
简述Redis设计与实现 Redis是一个高性能的key-value的非关系型数据库,Redis是运行在内存中的一种数据库,但是它也可以持久化到磁盘中,Redis的实现有着更为复杂的数据结构并且提供对 ...
- 「MySQL高级篇」MySQL索引原理,设计原则
大家好,我是melo,一名大二后台练习生,大年初三,我又来充当反内卷第一人了!!! 专栏引言 MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段, ...
- UML建模语言、设计原则、设计模式
1.UML统一建模语言 定义:用于软件系统设计与分析的语言工具 目的:帮助开发人员更好的梳理逻辑.思路 学习地址:UML概述_w3cschool 官网:https://www.omg.org/spec ...
随机推荐
- zabbix3.0.4 探索主机Discovery自动发现agent主机和zabbix-agent自动注册详细图文教程
Zabbix 自动发现(Discovery)功能使用 随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添 ...
- H5使用codovar插件实现微信支付(微信APP支付模式,前端)
H5打包的app实现微信支付及支付宝支付,本章主要详解微信支付,支付宝支付请查看另一篇“H5使用codovar插件实现支付宝支付(支付宝APP支付模式,前端)” ps:本文只试用H5开发的,微信 AP ...
- ubuntu安装带调试功能的bochs
①进入bochs官网下载源码包 说明 用安装包直接安装没有调试功能 下载源码包步骤 a.输入网址:http://bochs.sourceforge.net/ b.单击图中红色标注图标 c.单击图中红色 ...
- Oracle使用学习笔记(一)
一.实体关系模型的三个关键因素 实体:具有相同特征和属性的显示世界事务的抽象,对应面向对象编程中的类,动物就是一个实体 属性:实体具有的特征,如类的属性,动物的名字,体长等 关系:一对一,一对多,多对 ...
- 在树莓派3B、Ubuntu 18.04关闭板载Wifi、蓝牙
树莓派没有传统的BIOS设置界面,文件/boot/firmware/config.txt就相当一个BIOS设置.这里是config.txt的详细文档:https://github.com/raspbe ...
- FileStream说明
FileStream(String, FileMode) FileStream(String path, FileMode) 文件打开模式:(FileMode)包括6个枚举 Append:追加 ...
- Arthas进阶学习(常用命令)
Step1 下载demo-arthas-spring-boot.jar,再用java -jar命令启动: wget https://github.com/hengyunabc/katacoda-sce ...
- angularJS+KindEditor无法获取或清空textarea的值
在html页面中初始化KindEditor: <script type="text/javascript"> var editor; KindEditor.ready( ...
- Trie树详解(转)
特别声明 本文只是一篇笔记类的文章,所以不存在什么抄袭之类的. 以下为我研究时参考过的链接(有很多,这里我只列出我记得的): Trie(字典树)的应用——查找联系人 trie树 Trie树:应用于统计 ...
- Linux nfs使用krb5的方式安全挂载
配置安全的网络nfs文件共享服务 由于本人是使用的rhce模拟考试环境来做的本题目,所以文中说到的实验脚本和评分脚本,以及krb5.keytab文件只有我本套环境独有,如果自己做练习可以不去使用实验脚 ...