对缓存的理解,设计,与测试

为什么要有缓存?

我想这个词来自于缓冲,即可以让系统喘口气儿,别一下子把系统打垮。当然有时候也不至于打垮,而是为了提升,因为系统每1MS的提升,

都是用户体验的直接变现。

缓存概念其实很广,有磁盘缓存,DB缓存,H5前端缓存等等。对了,还有CPU 的一级和二级缓存。

大概的看了看,这些缓存的实现和设计都有其自己特点,但究其原理,我目前的理解,是一致的。


即都是要解决:“大量数据频繁计算导致系统变慢”的问题。下面我以互联网架构中的缓存来解释我的理解。比如memoryCache 之类。


大量数据频繁计算,可以转化为的线下场景比如:电子商务网站里面的用户收货地址,每天长千上万的用户下单时,都会使用到,如果直接从DB进行查询,将会把系统拖慢。

这符合数据量大(每个用户都有一个或者一个以上的记录),频繁计算(没下单都要查询出我的地址)的场景。

这种情况,就可以使用缓存。(仅为举例,大部分数据库读写分离,并发读其实正常问题并不大)


用好缓存有几个关键点,包括“如何与DB保持同步”,“缓存过期时间”,“存储结构”,“缓存异常捕获”,“超时设置”等。


因为对于用户来讲,不知道数据存在哪里,但不论存在哪里,都要保证其正确性,一致性。所以,若使用了缓存,当用户在对收货地址进行增加、编辑、删除时,要同缓存

进行完全的同步。不然,其后果就不用我说了。这也是测试的重点。


缓存要持久化吗?这个问题不太好回答,因为缓存也是有空间区块的,大部分都是被逻辑处理的内存,所以如果数据量可控,可预估,可以考虑永不过期,持久化存储。

如果本身业务逻辑存在过期,当然也必须过期了。我觉得重点反正就是数据的价值性和成本性的问题,如果持久化会带来持久的价值,应该不过期的。


用缓存本身也是一种消耗,只不过内存orSSD等比DB,DISK的查询速度快,所以,好像缓存就等于快,其实并不是。缓存本身存储了大量的数据后,比如几T之类(分布式缓存),也需要查询,排序,对过期的数据进行过期等等,所以,缓存的挑选要有策略性,存什么东西选择什么样的缓存很重要,是否支持序列化,是否支持数据结构等等。


另外,缓存也是被程序管理起来的,经常被当做服务提供出来,一旦出现bug,会出现比如异常和超时等情况,这种情况,要有补偿机制,一般比如走DB或者重试机制。

最简单的情况,如果程序员不小心,写了一段比如超时时间2S,重试3次的逻辑,一旦出现问题,一个请求就要等待6S,而外部的调用方超时是3S的话,将会带来大量

的中断错误出现。系统资源也会被大量的重试进行持有。所以,要能够针对不同的缓存错误,做出合适的处理。

这也是测试的重点之处。


另外,为方便测试,带有缓存系统or中间件的产品测试,要有缓存数据管理客户端方便测试,比如简单的查询网页,java接口,或者其他形式的工具等等。


设计一个好的缓存公共系统,是非常不容易,自身要能够水平扩展之外,稳定和容错性就更不用说了,重点是在存储本身非常轻量,API简单易用,数据管理上支持

大量的高级操作和权限控制等等。


测试来讲,要关注使用缓存的合理性,特性针对性,逻辑性,容错性,以及性能等。


本文随笔对缓存的一些理解,未涉及具体的细节和产品。








  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值