大学生ppt免费模板网站,公司官网设计制作,seo搜索优化公司报价,推广方法和技巧缓存设计的典型方案 在使用缓存系统的时候#xff0c;还需要考虑缓存设计的问题#xff0c;重点在于缓存失效时的处理和如何更新缓存。 缓存失效是在使用缓存时不得不面对的问题。在业务开发中#xff0c;缓存失效时由于找不到整个数据#xff0c;一般会出于容错考虑#…缓存设计的典型方案 在使用缓存系统的时候还需要考虑缓存设计的问题重点在于缓存失效时的处理和如何更新缓存。 缓存失效是在使用缓存时不得不面对的问题。在业务开发中缓存失效时由于找不到整个数据一般会出于容错考虑从存储层再进行查询如果有则放入缓存。如果查找的数据在存储层根本就不存在缓存失去意义还会给后端服务带来巨大的请求压力会进一步引起雪崩效应。这种现象又被称为缓存穿透。 目前常用的解决缓存穿透问题的方案如下。 1在底层存储系统之上加一层布隆过滤器将所有可能存在的数据哈希到一个足够大的BitMap中一个一定不存在的数据会被这个BitMap拦截掉从而避免了对底层存储系统的查询压力。 2如果数据在存储层查询也为空那么对此空结果也进行缓存但要设置合适的失效时间。 更进一步地解决缓存穿透问题其实和缓存的更新机制是相关的。缓存更新的常用3种模式如下。 Cache Aside Pattern应用程序以数据库为准失效则从底层存储更新更新数据先 写入数据库再更新缓存。这是最常用的缓存更新模式。 Read/Write Through Pattern以缓存为准应用只读/写缓存但是需要保证数据 同步更新到数据库中。 Write Behind Caching Pattern以缓存为准应用只读/写缓存数据异步更新到数据库不保证数据正确写回会丢数据。可以采用Write Ahead Logging等机制避免丢数据。 如上在缓存失效时采用何种策略去更新缓存直接决定了能否解决缓存穿透的问题。Cache Aside Pattern 中缓存失效从底层存储更新无法避免缓存穿透的问题。基于以上3种模式采用下面更为细化的更新机制可以在一定程度上避免缓存穿透的问题。 缓存失效时用加锁或者队列的方式单线程/进程去更新缓存并等待结果。 。缓存失效时先使用旧值同时异步控制为同时只有一个线程/进程更新缓存. 缓存更新失败则抛出异常。 .缓存失效时先使用旧值同时异步控制为同时只有一个线程/进程更新缓存 缓存更新失败则延续旧值的有效期。 .数据写入或者修改时更新数据存储后再更新缓存。缓存失效时即认为数据不存在。.数据写人或者修改时只更新缓存使用单独线程周期批量刷新缓存到底层存储。缓存失效时即认为数据不存在。这种方案不能保障数据的安全性有可能会丢数据。、采用单独线程/ 进程周期将数据从底层存储放到缓存中。缓存失效时即认为数据不存在。这种方案无法保证缓存数据和底层存储的数据强一致性。 如果一开始设计缓存结构的时候注意切分粒度把缓存力度划分得细一点那么缓存 命中率相对会高也能在一定程度上避免缓存穿透的问题。 此外还可以在后端做流量控制、服务降级或者动态扩展以应对缓存穿透带来的访 问压力。