缓存刷新和更新策略输入
Posted
技术标签:
【中文标题】缓存刷新和更新策略输入【英文标题】:Caching refresh and update strategy inputs 【发布时间】:2021-12-29 18:11:21 【问题描述】:我正在构建一个 Redis 缓存来存储产品数据,例如
键值对作为
key -> testKey
value [json] ->
"testA" : "A",
"testB" : "B",
"testC" : "C"
我正在努力解决的问题是,如果我收到两个更新此键值的请求。
request1 更改 -> "testB" = "Bx"
request2 更改 -> "testC" = "Cx"
如何处理不一致。 根据我的理解,一个请求将读取上述数据并仅更新 testB 值,而另一个请求将更新 testC 值,因为它们是并行运行的,并且任何新请求都不会等待缓存中的最后一次更新传播。
我们如何与 Redis 保持数据一致性? 我可以考虑在前面使用事务数据库进行锁定,但这会减少实时数据的延迟。
【问题讨论】:
“这些是并行运行的”不正确。 Redis 是单线程的,单个命令(如HSET
)是原子的。所以你提到的操作没有竞争条件。
【参考方案1】:
这取决于您在 Redis 中选择的数据结构。
在您的情况下,哈希将是将所有字段存储在您的值中的好方法。并使用 HSET 命令更新目标字段,可以保证您的更新请求只会更新单个字段。并且所有 Redis 命令都将按顺序执行,因此您不会遇到并发问题。
您还可以使用 String 来存储原始 json 数据,并对每个查询和更新进行序列化/反序列化。在这种情况下,您将需要考虑并发性,因为您的读取和更新不会是原子操作。(也许可以使用分发锁来解决)。
【讨论】:
以上是关于缓存刷新和更新策略输入的主要内容,如果未能解决你的问题,请参考以下文章