`
soleghost
  • 浏览: 41994 次
  • 性别: Icon_minigender_1
  • 来自: 未知
社区版块
存档分类
最新评论

缓存小技巧--异步更新缓存时remove cache数据

阅读更多

在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存的应用已经越来越多了(为什么是异步更新缓存,因为异步不仅可以提高系统性能,而且提高系统的伸缩性和可用性),由于缓存的更新是异步的,可能由于多个更新缓存的并发线程而导致的脏数据。

 

举例,有下面2个线程A、B同时执行业务,执行完业务之后,会产生2个异步的线程A1、B1去更新缓存,在理想情况下,A1和B1应该保持顺序性,即A1先更新缓存、B1再更新缓存,但是由于线程本身是异步的,加上2个线程可能分布在不同应用服务器上,所以对执行线程时顺序没有办法保证,如果B1先执行,A1再执行,这样B1的数据就被A1覆盖掉,从而导致脏数据。有没有什么好的办法防止这种脏数据呢?


解决办法:线程每次异步执行更新缓存时,不去更新缓存,而是去remove缓存。
这样的好处,不管A1、B1的执行顺序如何,都不可能导致缓存数据被覆盖的现象,因为每次是去remove缓存;
等待下次查询时将数据库中的数据load进缓存中。
缺点:如果更新的频率比较高,则可能会增加数据库的负载,所以事先必须先评估好业务。

 

分享到:
评论

相关推荐

    BitmapCache-master图片异步下载缓存

    实现图片下载和缓存功能,可以将图片下载之后缓存到内存或者SD卡中。图片第一次从互联网下载之后,就会缓存到内存或者SD卡中。第二次再打开浏览时,就无需再从互联网下载,而是直接从内存或者SD卡中读取。 效果图说...

    安卓图片加载缓存相关-Android-异步图片加载器.zip

    "安卓图片加载缓存相关-Android-异步图片加载器.zip"这个压缩包中可能包含了一个实现异步图片加载和缓存的示例项目。异步加载能够避免UI线程阻塞,提高用户体验,而缓存机制则能减少网络请求,加快图片显示速度。 ...

    web服务器缓存实现原理,通过chrome f12观察web服务器缓存

    web服务器缓存实现原理,通过chrome f12观察web服务器缓存 后台action命中缓存hit Via X-cache X-Cache-Lookup

    alisoft-xplatform-asf-cache-2.5.1.jar

    在实际应用中,alisoft-xplatform-asf-cache-2.5.1.jar提供了丰富的API,支持基本的增删查改操作,如设置、获取、删除和更新缓存项。此外,它还可能包含高级特性,如批量操作、过期策略、数据序列化等,以满足不同...

    Cache(数据缓存)

    然而,对于实时变化快速且使用范围狭窄的数据,如具体的采购订单,Cache可能不是最佳选择,因为数据的更新可能导致Cache中的数据过时。 4. **使用Cache的注意事项** - **过期策略**:Cache中的数据具有生命周期,...

    spring-cache(通过key值更新缓存)

    5. **条件式缓存更新**:在某些情况下,我们可能希望有条件地更新缓存,而不是每次调用方法都更新。这可以通过在`@CacheEvict`上设置`condition`属性实现。例如: ```java @CacheEvict(value = "myCache", key = ...

    react-router-cache-route:使用类似React-Router的缓存进行路由在Vue

    如果只想要<KeepAlive> ,请尝试React v15 + React-Router v4 +问题使用Route ,前进或后退时无法缓存组件,这会导致数据丢失和交互原因与解决方案Route不匹配时,组件将被卸载阅读源代码之后Route ,我们发现使用...

    cache-api-1.0.0.jar

    《cache-api-1.0.0.jar:JSR107缓存规范解析》 在IT行业中,缓存是优化系统性能的关键技术之一。本文将深入探讨“cache-api-1.0.0.jar”这个软件包,它与JSR107(Java Cache API)最终规范密切相关,为开发者提供了...

    Spring基于注解的缓存配置--EHCache AND OSCache

    - 对于更新频繁的数据,考虑使用异步更新策略。 - 使用合适的序列化机制,保证缓存数据的序列化和反序列化效率。 通过以上内容,我们可以看到Spring如何利用注解简化了缓存配置,以及如何结合EHCache或OSCache...

    Chrome 进阶技巧:将缓存路径放到非系统分区并设置大小

    ### Chrome 进阶技巧:将缓存路径放到非系统分区并设置大小 #### 背景与需求 在日常使用过程中,很多用户发现Chrome浏览器默认会将安装程序、缓存及用户数据等存储在系统分区中。对于那些系统分区较小或是使用固态...

    Laravel开发-laravel-page-cache

    `laravel-page-cache` 支持缓存标签,可以为不同的页面分配不同的标签,当某些数据更新时,可以通过标签清除相关的页面缓存,而不是全局清除。例如: ```php /** * @PageCache(60, ['news', 'latest']) */ public ...

    Laravel开发-rw-file-cache-laravel-cache-driver

    `rw-file-cache-laravel-cache-driver`针对文件缓存进行了优化,特别关注读写效率,这在处理大量数据或高并发场景时尤为重要。在默认的文件驱动中,Laravel会将缓存数据存储为PHP序列化的文件,而这个驱动可能采用更...

    nuxt-perfect-cache-main-源码.rar

    - **初始化**:在 Nuxt 应用启动时,`nuxt-perfect-cache-main` 会进行初始化,设置缓存策略和存储方式(如内存、Redis 或其他数据库)。 - **请求处理**:当接收到客户端请求时,插件会检查请求的 URL 是否存在于...

    Android--开发--异步加载图像小结 (含线程池,缓存方法).rar

    在Android应用开发中,图像加载是一个非常重要的环节,特别是在处理大量图片或者网络图片时,如何高效、节省资源地实现异步加载就显得尤为关键。本篇文章将深入探讨Android中的图像异步加载策略,包括线程池和缓存...

    ASP.net读Cache缓存简单例子

    5. **从Cache获取数据**:通过`Cache[key]`或`Cache.Get(key)`获取缓存数据,如果数据不存在,这些方法将返回`null`。 6. **移除Cache项**:使用`Cache.Remove(key)`方法可以移除指定键值的Cache项。 **Cache缓存...

    springboot 使用spring cache缓存 和 缓存数据落地到redis

    **@CacheEvict**:当删除或更新可能导致缓存中数据过期的操作时,使用这个注解来清除相应的缓存项。它可以与方法的参数匹配,以便精确地清除特定的缓存条目。\n\n此外,我们还可以使用`@CacheConfig`注解来为一个类...

    Cache 缓存数据和删除缓存的简单示例

    ASP.NET提供了一些方法来操作缓存,例如`Insert`用于添加或更新缓存项,`Remove`用于删除指定的缓存项。删除缓存通常是由于数据更新或缓存过期,以保持数据的一致性。例如,当数据库中的数据发生变化时,可以触发一...

    axios-cache-plugin:使用axios时帮助您缓存GET请求

    axios-cache-plugin 使用axios时帮助您缓存GET请求。 安装 npm install axios-cache-plugin --save 或者 yarn add axios-cache-plugin 用法 将缓存功能添加到axios import axios from 'axios' import wrapper ...

    v8-compile-cache:需要挂钩以实现自动V8编译缓存持久性

    v8编译缓存 v8-compile-cache附加了一个require钩子,以使用来加快实例化时间。 “代码缓存”是V8进行的解析和编译工作。 中引入了利用V8生成/使用此缓存的。用法添加依赖项: $ npm install --save v8-compile-...

    前端开源库-cache-swap

    `cache-swap`库是前端开发者优化性能的一个实用工具,它通过临时文件的缓存交换策略,解决了JavaScript在处理大量数据时可能面临的内存瓶颈问题。在合适的应用场景下,结合良好的设计和策略,`cache-swap`可以显著...

Global site tag (gtag.js) - Google Analytics