我是靠谱客的博主 细腻刺猬,最近开发中收集的这篇文章主要介绍缓存使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们一般都会把数据存放在关系型数据库中,不管数据库的性能有多么好,一个简单的查询也要消耗毫秒级的时间,这样我们常说的 QPS 就会被数据库的性能所限制,我们想要提高QPS,只能选择更快的存储设备。(即每秒的响应请求数)
对于缓存来说,数据不常变更且查询比较频繁是最好的场景,如果查询量不够大或者数据变动太频繁,缓存也就是失去了意义。(数据变动频繁要不断让缓存失效)
日常工作使用的缓存可以分为内部缓存和外部缓存。内部缓存一般是指存放在运行实例内部并使用实例内存的缓存,这种缓存可以使用代码直接访问(在应用服务器上)。外部缓存一般是指存放在远程服务器的缓存,通常是通过网络获取,反序列化后进行访问。

内部缓存

在系统中,有些数据量不大、不常变化,但是访问十分频繁,例如省、市、区数据。针对这种场景,可以将数据加载到应用的内存中,以提升系统的访问效率,减少无谓的数据库和网路的访问。
如果只是需要将一些数据缓存起来,避免不必要的数据库查询,那么 Map 就可以满足。
如果你需要缓存有强大的性能,或者对缓存有更多的控制,可以使用 Caffeine
本地缓存有以下优点:

  • 直接使用内存,速度快,通常存取的性能可以达到每秒千万级
  • 重启应用会丢失

外部缓存

Redis / Memcached 都是使用内存作为存储,所以性能上要比数据库要好很多,再加上Redis 还支持很多种数据结构,不过即便是使用内存,也还是需要通过网络来访问,所以网络的性能决定了 Reids 的性能。

缓存的更新策略

使用缓存时,更新策略是非常重要的。最常见的缓存更新策略是 Cache Aside Pattern:

  • 失效:应用程序先从 cache 取数据,没有得到,则从数据库中取数据,成功后,放到缓存中。
  • 命中:应用程序从 cache 中取数据,取到后返回。
  • 更新:先把数据存到数据库中,成功后,再让缓存失效。

缓存双淘汰机制,在更新数据库的时候淘汰缓存。此外,设定超时时间,例如30分钟。极限场景下,即使有脏数据入cache,这个脏数据也最多存在三十分钟。

缓存预热

在新启动的缓存系统中,如果没有任何数据,在重建缓存数据过程中,系统的性能和数据库复制都不太好,那么最好的缓存系统启动时就把热点数据加载好,例如对于缓存信息,在启动缓存加载数据库中全部数据进行预热。一般情况下,我们会开通一个同步数据的接口,进行缓存预热。

缓存穿透

如果因为不恰当的业务,或者恶意攻击持续地发请求某些不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上,会对数据库造成很大压力

最后

以上就是细腻刺猬为你收集整理的缓存使用的全部内容,希望文章能够帮你解决缓存使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部