Caching 缓存失效策略
在我当前的应用程序中,我们正在处理一些很少更改的信息 对于性能优化,我们希望将它们存储在缓存中Caching 缓存失效策略,caching,redis,Caching,Redis,在我当前的应用程序中,我们正在处理一些很少更改的信息 对于性能优化,我们希望将它们存储在缓存中 但问题在于每当更新这些对象时都会使其无效 我们尚未最终确定缓存产品。 当我们在Azure上构建此应用程序时,我们可能会使用Azure Redis缓存 一种策略是在更新API中添加代码,这将使缓存中的对象无效。 我不确定这是否是一种干净的方式? 我们不希望使用基于时间(TTL)的缓存过期时间。 您能推荐一些用于缓存失效的其他策略吗?在更新阶段使缓存失效是一种可行的方法,在过去曾被大量使用 当更新发生时,
但问题在于每当更新这些对象时都会使其无效
我们尚未最终确定缓存产品。
当我们在Azure上构建此应用程序时,我们可能会使用
Azure Redis缓存
一种策略是在
更新API
中添加代码,这将使缓存中的对象无效。我不确定这是否是一种干净的方式?
我们不希望使用基于时间(TTL)的缓存过期时间。
您能推荐一些用于缓存失效的其他策略吗?在更新阶段使缓存失效是一种可行的方法,在过去曾被大量使用 当更新发生时,这里有两个选项:
例如,当您向数据库写入数据时,
Redis
缓存可能会在几秒钟内不可用,因此这两个缓存之间的数据保持不同步。在这种情况下你会怎么做?
您可以同时使用多个选项
SCAN
进行后台处理,以便在出现不一致时逐个键进行验证。此过程可能很慢,并且可以针对数据库的副本运行
正如您在这里看到的,主要思想始终是一样的:如果缓存更新失败,不要让它成为永久性的问题,可能会永远存在,给它一个机会在以后修复自己。我认为lambda(ish)体系结构适合您的用例
我这边有Oracle数据库。Logstash JDBC插件在获取最新记录方面做得不错。logstash输出可以格式化并打印到Redis可以使用的文件中。我编写了一个小bash脚本来协调这一点。测试了300万条记录,工作正常。
del cache on update
在同时调用fetch操作且值不在缓存中时,可能会导致踩踏,所有请求都将转到数据库。可以使用锁定或其他策略来避免这种情况。因此,在读取期间更新缓存可能是一个更好的选择。