首页 > 其他分享 >关于缓存的一些思考

关于缓存的一些思考

时间:2024-01-30 10:34:03浏览次数:22  
标签:缓存 两级 更新 二级缓存 关于 思考 数据 时长

  1. 缓存的主动更新和被动更新
  主动更新是指在数据发生变化时,应用程序主动更新缓存。这种方式需要应用程序去检测数据的变化,并主动更新缓存。例如,一些系统会使用定时任务或者轮询的方式来检测数据的变化,一旦发现数据发生变化,就会主动更新缓存。这种方式数据及时性较高,可以保证缓存和数据源之间的数据一致性。 被动更新是指数据使用程序需要时才被动更新缓存。当应用程序需要使用数据时,会先从缓存中获取数据,如果缓存中没有数据或者数据已经过期,则从数据源中获取最新数据并更新缓存。这种方式不需要应用程序去检测数据的变化,可以减少应用程序的负担。但是,如果数据频繁变化,缓存中的数据可能会长时间不更新,导致缓存和数据源之间的数据不一致。
  1. 什么情况下需要考虑使用两级缓存?
  我遇到的情况是,本来接口程序的负载数量不多,大概10个左右的时候,一级缓存能够满足业务的使用场景,后边因为调用数量激增,在将负载数量增大到25个以上的时候,发现接口程序偶发的调用时间不满足业务要求。 造成这种问题的主要原因是,1.读取数据库的访问压力变大;2.缓存命中率变得很低。 补充一下,我的缓存更新策略是被动更新的,一级缓存用的是内存缓存。 在这种情况下,增加Redis缓存作为二级缓存,问题被大大的解决
  1. 二级缓存哪个是一级
  一级缓存指的是更靠近程序或者说更靠近数据使用者的一层,通常把内存缓存当作一级缓存。   二级缓存值得是原理程序或者说数据使用者的一层,常见的二级缓存是Redis。
  1. 多负载情况下,两级缓存比一级缓存较少对数据库的访问次数
  在一级缓存中,每个实例或负载都有自己的缓存,当数据发生变化时,所有的缓存都需要被更新。因此,在多实例或多负载的环境中,如果一个实例或负载的数据发生变化,其他实例或负载的缓存也需要被更新,这会导致更多的数据库访问。 相比之下,两级缓存通常包括一个共享的二级缓存,它被多个实例或负载共享。当数据发生变化时,只需要更新共享的二级缓存,而不需要更新每个实例或负载的缓存。这样可以减少对数据库的访问次数,提高性能和效率。
  1. 关于两级缓存的缓存时长计算
  首先,两级缓存中数据在缓存中可能停留的最大时长,为两级缓存时长的累加,比如一级缓存时长为T1,二级缓存的缓存时长为T2,那么两级缓存中数据停留最长时长为T1+T2 然后,两级缓存中数据在缓存中停留的最短时长,为两级缓存中更短的那个时长,比如比如一级缓存时长为T1,二级缓存的缓存时长为T2,那么两级缓存中数据停留最长时长为min(T1, T2)。这里多聊两句,比如一级缓存的时长为15分钟,二级缓存的时长为10分钟,有人会觉得,那么数据停留最短时长应该是15分钟啊,这里边有一个误区,停留时间不一定是被调用的,如果为主动更新到二级缓存,一级缓存没有被人调用过的话,那数据只会在二级缓存中停留10分就被更新掉了。如果是被动更新的情况下,我觉得数据最小停留时长确实应该是15分钟(不过这里先存疑,我会在后边进行验证和解释)。
  1. 关于两级缓存的各级缓存时长怎么设定的问题
  数据的重要性和变化频率:如果数据非常重要且频繁变化,最小值应该相对较小,以便能够及时获取最新的数据。如果数据重要性较低或变化频率较低,最小值可以适当增大。 系统性能和可用性要求:如果系统对性能要求较高或对可用性要求较高,最小值应该相对较小,以便能够快速响应请求和提高系统的可用性。 缓存系统本身的限制:不同的缓存系统有不同的限制和特点,最小值的计算需要考虑这些因素。例如,一些缓存系统可能会有最小缓存时间的限制,因此最小值需要根据这些限制进行计算。 分布式系统的同步机制:在分布式系统中,缓存的同步机制也会影响最小值的计算。如果系统采用同步机制进行缓存更新,最小值应该相对较小,以便能够及时同步数据。如果采用异步机制,最小值可以适当增大                

标签:缓存,两级,更新,二级缓存,关于,思考,数据,时长
From: https://www.cnblogs.com/pangzili/p/17996564

相关文章

  • 一个招标引发的思考
    现在混合系统招标越来越多,靠集成、靠做接口拉通不是优势了。财务系统我们不占优人力系统我们也没有绝对优势但是我们的财务、人力是一体的,共享一套权限体系、界面风格一直、数据天然拉通;更绝的是,我们还有OA,还有…并且这些都是同一个平台上的应用千里马平台就是要构造这样的生态......
  • go-cache基于内存的键值存储缓存库
    Go的内存key:valuestore/cache(类似于Memcached)库,适用于单机应用程序。文档https://pkg.go.dev/github.com/patrickmn/go-cachehttps://github.com/patrickmn/go-cachehttps://patrickmn.com/projects/go-cache/安装gogetgithub.com/patrickmn/go-cache方法funcN......
  • 关于ufw 报错ip6tables v1.6.1: can't initialize ip6tables table `filter': Table d
    背景在ubuntuarm版本上安装ufw,设置规则时报错发现报错ip6tablesv1.6.1:can'tinitializeip6tablestable`filter':Tabledoesnotexist(doyouneedtoinsmod?)Perhapsip6tablesoryourkernelneedstobeupgraded.解决办法一.升级ip6tables二.禁用i......
  • 1.29 深痛教训 关于 unsigned
    unsignedlonglong无符号长长整型,常用于比longlong大一倍的整数范围或自然溢出\(\bmod2^{64}\)unsignedlonglong范围为\(0\sim2^{64}-1\),而longlong是\(-2^{63}\sim2^{63}-1\),同时,unsignedlonglong是自动对\(2^{64}\)取模,也叫自然溢出,在特定题目尤其哈希......
  • 关于Linux内核4.12之前版本中, tcp_tw_recycle开启后NAT环境总是出问题的分析
     问题出现的场景很简单,nat网关下,有几台服务器,需要访问企业内部的某个的API服务器,API服务器上rcycle设置为1(4.12内核版本之前有这个设置,之后这个属性取消了,理论上也不会出现这种问题了),就在NAT下客户端并发量比较大的情况下,出现连接不上的情况(应该是SYN后,没有收到SYNACK,连接被丢......
  • 【深度思考】一线开发大头兵对于工作的感悟分享
    目录前言一、工作方式方法1.1先尽人事1.2关注个人成长1.3work&lifebalance二、构建知识体系2.1夯实基础2.2抽象思维2.3广度与深度三、尽早规划职业3.1市场现状3.2如何破局四、文章小结前言写在前面的是关于自己的一点介绍,21年本科毕业,学的是计算机科学与技术专业,到现在工作(实习......
  • [刷题笔记] 关于栈 & 队列常用操作方法的再探索
    Part0:序其实本来这都是很基础的东西,可惜野路子出身基础并不扎实。借着这个机会整合一下吧。也做了一些题了解了一些基本操作方法。本文对于栈和队列的原理不再过多赘述,默认读者掌握基本原理。参考题单:数据结构加强001:栈和队列2024现代信息学测试1:栈和队列本文所讲例题......
  • 关于三次握手和四次挥手的详解
    我一看到TCP,啪就点进来了,很快啊。  TCP报文   一个完整的TCP报文头部共有20个字节,其中包括:源端口号(16位)和目的端口号(16位):再加上ip首部的源ip地址和目的IP地址可以唯一确定一个TCP连接。数据序号(16位):表示在这个报文段中的第一个数据字节序号。确认序号:仅当......
  • 初识EHCache缓存框架(3.10.8版本)
    https://www.ehcache.org/documentation/3.10/xml.html引入依赖<!--https://mvnrepository.com/artifact/org.ehcache/ehcache--><dependency><groupId>org.ehcache</groupId><artifactId>ehcache</artifa......
  • 可观测性之如何识别网站文件命中了缓存?
    为了告慰良心,webdeveloper搞了可视化、组件化、工程化、微前端、低代码。网站平均加载时间依然客死在2s内。讲的是如何判断网站使用的文件是缓存,有关使用的本地存储数据(ls、ss等)不在讨论范围。说清楚范围后,说一下分类,这里的文件缓存有两类,第一类是:diskcachememorycache这里的缓......