2021-01-06

博客园Logo
首页
新闻
博问
专区
闪存
班级
代码改变世界
搜索
注册
登录
大杂草
博客园首页新随笔联系订阅管理
随笔 - 121 文章 - 0 评论 - 14
Redis缓存篇(一)Redis是如何工作的
Redis提供了高性能的数据存取功能,所以广泛应用在缓存场景中,既能有效地提升业务应用的响应速度,还可以避免把高并发压力发送到数据库层。

因为Redis用作缓存的普遍性以及它在业务应用中的重要作用,所以需要系统地掌握缓存的一系列内容,包括工作原理、替换策略、异常处理和扩展机制。

今天我们了解缓存的特征和Redis缓存的工作机制。

缓存特征
主要有两个特征:

一是在一个层次化的系统中,缓存一定是一个快速子系统,数据存在缓存中时,能避免每次从慢速子系统中存取数据。

二是缓存系统的容量大小总是小于后端慢速系统的,我们不可能把所有数据都放在缓存系统中。

Redis缓存处理请求的两种情况
把Redis用作缓存时,会把Redis部署在数据库的前端,业务应用在访问数据时,会先查询Redis中是否保存了相应的数据。此时,根据数据是否存在缓存中,会有两种情况:

缓存命中:Redis中有相应数据,就直接读取Redis,性能非常快。
缓存失败:Redis中没有相应数据,就从后端数据库中读取数据,性能就会变慢。
因为Redis是独立的系统软件,和业务应用程序是两个软件,因此使用Redis缓存时,要在应用程序中增加三方面代码:

当应用程序需要读取数据时,需要在代码中显式调用Redis的GET操作接口,进行查询;
如果缓存缺失了,应用程序需要再和数据库连接,从数据库中读取数据;
当缓存中的数据需要更新时,也需要在应用程序中显式地调用SET操作接口,把更新的数据写入缓存。
下面是一段示例代码:

复制代码
String cacheKey = “productid_11010003”;
String cacheValue = redisCache.get(cacheKey);
//缓存命中
if ( cacheValue != NULL)
return cacheValue;
//缓存缺失
else
cacheValue = getProductFromDB();
redisCache.put(cacheValue) //缓存更新
复制代码

缓存的类型
按照Redis缓存是否接受写请求,可以分为只读缓存和读写缓存。

只读缓存
只读缓存指读请求会先经过Redis,写操作不会经过Redis,但是会删除相应的数据。当再次读取数据时,会发生缓存缺失,然后从数据库中读取并写入缓存。

读写缓存
读写缓存指除了读请求会发到缓存处理,写请求也会发到缓存处理。

和只读缓存不一样的是,在使用读写缓存时,最新的数据是在Redis中,而Redis是内存数据库,一旦出现掉电或宕机,内存中的数据就会丢失。

所以,根据业务应用对数据可靠性和缓存性能的不同要求,会有两种策略,分别是同步直写和异步写回。

同步直写,优先保证数据可靠性:写请求发给缓存,同时也会发给后端数据库进行处理,等到缓存和数据库都写完数据,才给客户端返回。
异步写回,优先提供快速响应:所有写请求都先在缓存中处理,等到这些增改的数据要被缓存淘汰时,缓存再写回后端数据库。
只读缓存和读写缓存的选择
如果需要对写请求进行回事,选择读写缓存。
如果写请求很少,或者是只需要提升读请求的响应速度的话,选择只读缓存。
只读缓存和使用直写策略的读写缓存有什么区别?
使用只读缓存时,是先把修改写到后端数据中,再把缓存中的数据删除。下次访问时,再从后端数据库读取。

优点:数据库和缓存完全一致,缓存中永远保留的是经常访问的热点数据。
缺点:数据删除后访问会触发一次缓存缺失,从后端数据库加载数据到缓存中,这个过程访问延时会变大。
使用读写缓存时,是同时修改数据库和缓存中的值。

优点:被修改后的数据永远在缓存中存在,下次访问直接命中缓存。
缺点:在高并发场景下,可能会导致缓存和数据库的不一致
当数据库或缓存修改失败时:

只读缓存:数据库和缓存中的数据保持一致
读写缓存:可能导致缓存和数据库的不一致
总结一下:只读缓存牺牲一定性能,优先保证数据库和缓存的一致性,更适合对于一致性要求比较高的业务场景。对于数据库和缓存一致性要求不高,或者不存在并发修改同一个值的情况,使用读写缓存比较合适,保证更好的性能。

参考资料
23 | 旁路缓存:Redis是如何工作的?
标签: redis, redis缓存篇
好文要顶 关注我 收藏该文
大杂草
关注 - 29
粉丝 - 23
+加关注
00
« 上一篇: Redis基础篇(八)数据分片
posted @ 2021-01-06 08:02 大杂草 阅读(112) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】AWS携手博客园为开发者送福利,注册立享12个月免费套餐
【推荐】七牛云新老用户同享 1 分钱抢 CDN 1TB流量大礼包!
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· php操作redis–列表篇
· 【Python之路】特别篇–Redis
· Redis - 安装redis
· php操作redis–集合(set)篇
· php操作redis–字典(hash)篇
» 更多推荐…

最新 IT 新闻:
· 产能利用率仅5.3%,柔宇上市是假扩张、真圈钱?
· 体检异常率99%,这届打工人的身体有多差?
· 虾米音乐停止运营:8年前被阿里收购 曾一起走过洪荒岁月
· 那个想去网易云的女孩倒在了拼多多
· 蔚来首款旗舰轿车专利图曝光!续航有望超900km
» 更多新闻…
公告
昵称: 大杂草
园龄: 9年5个月
粉丝: 23
关注: 29
+加关注
< 2021年1月 >
日 一 二 三 四 五 六
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 1 2 3 4 5 6
搜索

常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
redis(26)leetcode(22)mysql(18)算法(18)链表(16)数据结构(15)StackExchange.Redis(14)ASP.NET Core(11)redis基础篇(8)递归(6)更多
随笔档案
2021年1月(3)
2020年12月(24)
2020年11月(20)
2020年10月(21)
2020年9月(7)
2020年8月(6)
2020年7月(24)
2020年6月(13)
2020年1月(1)
2019年3月(1)
2019年2月(1)
最新评论

  1. Re:Redis基础篇(四)持久化:内存快照(RDB)
    写的很好

–菜鸟无名
2. Re:MySQL高可用(三)搭建主备同步实战
嘿嘿

–缺陷测试
3. Re:MySQL高可用(二)主备延时如何解决?
mark

–BirdZ
4. Re:MySQL锁(四)行锁的加锁规则和案例
0x11

–KMSFan
5. Re:MySQL锁(四)行锁的加锁规则和案例
看来是学了阿里mysql大神的教程

–Itdotaer
阅读排行榜

  1. 滑动窗口(Sliding Window)技巧总结(676)
  2. Cookie:SameSite,防止CSRF攻击(676)
  3. ASP.NET Core Authentication系列(一)理解Claim, ClaimsIdentity, ClaimsPrincipal(658)
  4. ASP.NET Core Authentication系列(二)实现认证、登录和注销(638)
  5. MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?(511)
    评论排行榜
  6. MySQL锁(四)行锁的加锁规则和案例(2)
  7. MySQL锁(二)表锁:为什么给小表加字段会导致整个库挂掉?(2)
  8. MySQL存储引擎:MyISAM和InnoDB的区别(2)
  9. 并查集(UnionFind)技巧总结(2)
  10. 《数据结构与算法之美》20——二叉树(二)二叉查找树(2)
    推荐排行榜
  11. ASP.NET Core Authentication系列(一)理解Claim, ClaimsIdentity, ClaimsPrincipal(7)
  12. ASP.NET Core Authentication系列(四)基于Cookie实现多应用间单点登录(SSO)(4)
  13. ASP.NET Core Authentication系列(二)实现认证、登录和注销(4)
  14. 滑动窗口(Sliding Window)技巧总结(4)
  15. ASP.NET Core Authentication系列(三)Cookie选项(3)
    Copyright © 2021 大杂草
    Powered by .NET 5.0 on Kubernetes
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值