基于redis的缓存系统设计

本文探讨了缓存系统设计的目的,利用Redis、HBase和Kafka构建了一个缓存系统。针对强实时性和强持久性两种场景,详细阐述了写入和读取key的操作,以及解决缓存穿透和数据一致性的问题。最后提到了C语言调用相关库的参考。
摘要由CSDN通过智能技术生成

1. 缓存的目的

使用缓存系统的目的是为高并发的访问提供高质量的、实时的反馈。一般的缓存系统,都是按照 key-value 去查询缓存层(如 redis),如果 key 不存在,就应该去后端持久层DB(如 HBase,MySQL)中查找 。这个时候,如果请求的并发量很大,就会对后端的DB系统造成很大的压力。这就叫做缓存穿透。

造成的原因

1.业务自身代码或数据出现问题
2.一些恶意攻击、爬虫造成大量空的命中,此时会对数据库造成很大压力
3.缓存崩溃

解决方法

如果一个查询返回的数据为空,不管是数据不存在还是系统故障,我们仍然把这个结果进行缓存,但是设置一个较短的过期时间。

2. 缓存系统设计

这里假定使用 redis 作为缓存层,hbase 作为 DB 层,kafka 作为队列层。每层的软件正好符合其特性。以下分写入和读取2个客户端的操作加以说明。由于业务的不同,对数据持久化的强度要求也不同。比如充值,购买等行为,要求强持久性(2.2),对速度和性能的要求就相应降低。而对话,聊天,游戏互动等行为,要求强实时性(2.1),对速度要求极高,相应地对持久化可靠性要求就可以低一些。

(更安全的设计是保证数据的强一致性,这是通过关系数据库的分布式事务来实现的:即在某个帐号的一笔事务期间,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值