缓存中间件学习笔记 - 1 概述

1.1 缓存

缓存是将数据移动到速度较快的介质上, 以加快数据的处理速度。 使用缓存有两个主要的好处: 首先, 将数据从比较慢的介质放到比较快的介质上, 加快数据的读取速度; 将计算的结果存起来, 下次需要的时候直接从缓存中获取, 避免重复计算。 

缓存可以对系统的性能有很大的提升, 表现为这些方面: 增大系统吞吐量; 加快响应速度; 减少缓存层之后的模块的压力, 如数据库。

 

1.2 缓存的适用场景

缓存主要用来存放哪些读写比很高, 并且很少变化的数据, 如一个管理系统的菜单, 电商系统的商品类目等信息。  一般的网站的数据请求是符合二八原则的, 即80%的请求将落在20%的数据上, 都有明显的数据热点,  所以缓存是一个很通用的性能优化手段。  在对网站进行性能优化时, 优先考虑使用缓存。 

网站性能优化第一定律: 优先使用缓存来优化性能

                                                                                               --- 《大型网站技术架构》, 李智慧(前阿里技术专家)

1.3 使用缓存的注意事项

不适合使用缓存的情况

  • 频繁修改的数据不适合使用缓存。 
  • 没有热点的访问

如果应用程序没有热点, 不遵循二八定律,即大部分的访问都集中在小部分的数据中, 那么缓存也就没有什么意义了, 因为大部分数据在被再次访问之前都已经刷出了缓存。

 

数据不一致与脏读

使用了缓存, 那么就要忍受数据在一段时间内因为缓存没有更新而导致的数据不一致问题。 如更新了一个商品信息, 但是由于缓存的存在, 还是读到旧的数据。 可以通过在更新商品信息时, 让缓存失效, 来强制读到新的数据。

 

缓存可用性

数据库时按照有缓存的前提来搭建的, 如果缓存突然大面积失效, 那么本来由缓存分当的压力, 都回到了数据库上, 这时候就可能让数据库发生怠机。 这种情况被称作缓存雪崩,发生这种故障, 甚至不能简单地重启缓存服务器和数据库服务器来恢复访问。

通过提高缓存的可用性, 可以减少缓存大面积失效的情况。 如使用分布式缓存redis或者memcached, 每个缓存节点只存储部分的数据, 那么即使有一两台机器失效,只会丢失这部分的数据, 数据库的压力只会增加一小部分的压力, 不会超出其负载能力。

 

缓存穿透问题

如果客户端, 经常来请求一个根本不可能存在的数据, 那么所有的请求都会落到数据库上, 使用这种方式可以让数据库怠机。

预防的一个简单的机制可以是,将这个空结果的查询也缓存起来, 下次访问也可以从缓存中获取返回。

如果构造很多不存在的数据且不重复结果的查询呢? 这个时候应该怎么防备?

进行人机验证, 可以抵挡住大部分的这种攻击

 

缓存预热

系统刚刚启动时, 缓存中没有数据, 这时候系统的性能表现不能让人满意。 可以通过在系统启动时就加载一些热点的数据, 来预热缓存。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章