Redis是否提供选项以对缓存对象进行部分更新

问题描述 投票:0回答:2

我正在使用JCA(java caching api)将数据存储在Redis中,其中键是String,值是Object,它是JSON字符串。我要求对缓存值执行部分更新,而不是使用键来获取缓存值,然后修改属性并使用最新的缓存值执行put操作

{
  "attribute1" : "value1",
   "attribute2 " : [
  {
   "attribute3" : "value3"
  }
]
}

以上是示例json格式。如上文所述,有可能将attribute1的值从value1更新为value2,而无需使用键入redis来获取缓存值

redis spring-data-redis redis-cluster redisson jcache
2个回答
0
投票

您可以使用Lua脚本,以便使用CJSON Lua库更新该项目。我在How to nest a list into a structure in Redis to reduce top level?

上分享了一个类似的示例

不熟悉JCA,因此不确定您的客户端是否会使发送EVAL命令变得简单。


0
投票

假设您正在使用JCache API(即JSR-107),则可以使用Cache#invoke(K key, EntryProcessor<K,V,T> entryProcessor, Object... arguments)来就地执行更新,而不要先进行获取。根据Cache#invoke(K key, EntryProcessor<K,V,T> entryProcessor, Object... arguments)EntryProcessor javadoc在键上原子执行,因此您不必担心对同一缓存条目的并发修改。

© www.soinside.com 2019 - 2024. All rights reserved.