redis缓存设计要点随谈
在高并发系统中,缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的数据库,系统是很难撑住高并发的冲击。所以缓存设计是系统很关键的一环。
1、缓存更新
缓存的数据一般都是有有效期的,过了一段时间之后就会失效,再次访问时需要重新加载。缓存的失效是为了保证与数据源真实的数据保证一致性和缓存空间的有效利用性。
缓存更新一般分为3种
1、空间有限,当达到最大值时 根据系统的设置规则直接过期的,
比如最少使用、随机等一些过期策略。
2、缓存设置了过期时间的。
3、数据库更新了,主动更新缓存数据的。
一般的话 低一致性要求的符合1和2即可。
高一致性的符合2和3的方式。
2、缓存穿透
缓存穿透指的是查询一个不存在的数据,进而导致每次都落到数据库里面去查询。
1、解决办法主要是缓存一个空数据,并且设置一个较短的有效期,避免每次都命中数据库。
2、针对查询的键key 规则进行校验,比如 id_{N}
N数据 可以对N的格式和范围进行校验,不符合的直接返回,不往下走。
这种一般是在缓存key不存在且数据库不存在的情况下发生。
3、缓存雪崩
缓存雪蹦指的是同一时间大量缓存过期或者缓存不可用,导致大量的请求进入数据层。
针对这种情况一般是
1 设置缓存的过期时间,一般需要再加些随机数,避免过期时间大家都一样。
2、保证缓存服务的高可用。
3、缓存击穿:
指的是单个key在缓存中查不到,去数据库查询,如果数据库数据量大并且是高并发的情况下那么就可能会造成数据库压力过大而崩溃。
解决办法
1 使用锁机制确保缓存生成过程是单线程在操作,其他线程需等待、重试。
2、利用redis add 特性 直接加锁,其他请求进来,判断是进行中的直接return.
redis缓存设计要点随谈相关推荐
- Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...
- python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...
基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客 QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3. ...
- Redis缓存设计(key、value设计)与性能优化(缓存击穿、缓存穿透、缓存雪崩)
一.多级缓存架构 二.缓存设计 1.缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层. 缓存穿透将导致不存在的数 ...
- Redis缓存设计原理及实战
缓存是什么? 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度. 为了让你能更好地理解,我以计算机系统为例,来解释一下.下 ...
- Redis 缓存设计原则
基本原则 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选 ...
- 点赞模块设计:Redis缓存 + 定时写入数据库实现高性能点赞功能
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:solocoder juejin.im/post/5bdc2 ...
- 点赞模块设计 - Redis缓存 + 定时写入数据库实现高性能点赞功能
源码地址:github.com/cachecats/c- 点赞是作为整个系统的一个小模块,代码在 user-service 用户服务下. 本文基于 SpringCloud, 用户发起点赞.取消点赞后先 ...
- Redis缓存策略设计及常见问题
Redis缓存设计及常见问题 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.下面会介绍缓存使用技巧和设计方案,包含如下内容:缓存的收益和成本分析.缓存更新策略的选 ...
- redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
点赞功能大家都不会陌生,像微信这样的社交产品中都有,但别看功能小,想要做好需要考虑的东西还挺多的,如海量数据的分布式存储.分布式缓存.多 IDC 的数据一致性.访问路由到机房的算法等等. 图片来 Pe ...
最新文章
- JavaScript是如何工作的:编写自己的Web开发框架 + React及其虚拟DOM原理
- NDK 编译和使用静态库、动态库
- ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案
- ios/mac command
- Ant远程部署到Tomcat
- nand flash坏块管理OOB,BBT,ECC
- ZEN CART 在LINUX系统下设置邮箱方法---用GMAIL设置,方法选择SMTPAUTH
- 转:10+年程序员总结的20+条经验教训
- linux(Centos7)安装elasticsearch6.2.2
- 获取List对象的泛型类(原创)
- Linux C语言解析并显示.bmp格式图片
- 7款纯CSS3实现的炫酷动画应用
- mrpoid模拟器java版_mrpoid模拟器2019下载
- CCS错误解决:#10247-D null: creating output section “ramfuncs“ without a SECTIONS specification
- python爬虫编码彻底解决
- 【光学】基于matlab相互垂直的光波叠加仿真【含Matlab源码 2071期】
- 倒杨辉三角4行c语言,倒杨辉三角
- Pycharm debug崩溃、长时间不响应 解决
- 记:应聘浙江农信,软件开发工程师