我正在使用JCA(java caching api)将数据存储在Redis中,其中键是String,值是Object,它是JSON字符串。我要求对缓存值执行部分更新,而不是使用键来获取缓存值,然后修改属性并使用最新的缓存值执行put操作
{
"attribute1" : "value1",
"attribute2 " : [
{
"attribute3" : "value3"
}
]
}
以上是示例json格式。如上文所述,有可能将attribute1
的值从value1
更新为value2
,而无需使用键入redis来获取缓存值
您可以使用Lua脚本,以便使用CJSON Lua库更新该项目。我在How to nest a list into a structure in Redis to reduce top level?
上分享了一个类似的示例不熟悉JCA,因此不确定您的客户端是否会使发送EVAL命令变得简单。
假设您正在使用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在键上原子执行,因此您不必担心对同一缓存条目的并发修改。