我使用jca(java缓存api)在redis中存储数据,其中key是string,value是object,object是json字符串。我需要对缓存值执行部分更新,而不是使用键检索缓存值,然后修改属性并使用最新的缓存值执行put操作
{
"attribute1" : "value1",
"attribute2 " : [
{
"attribute3" : "value3"
}
]
}
上面是示例json格式。如上所述,是否可以更新 attribute1
从 value1
至 value2
不使用redis中的key获取缓存值
2条答案
按热度按时间zpf6vheq1#
可以使用lua脚本,以便使用cjson lua库更新项目。我已经分享了一个类似的例子,说明如何将一个列表嵌套到redis的结构中,以减少顶层?
不熟悉jca,所以不确定您的客户机是否能够简化发送eval命令。
j8yoct9x2#
假设您使用的是jcacheapi(即jsr-107),那么
Cache#invoke(K key, EntryProcessor<K,V,T> entryProcessor, Object... arguments)
执行就地更新而不是先获取后放置。根据EntryProcessor
javadoc公司,Cache#invoke
在密钥上以原子方式执行,因此您不必担心对同一缓存项的并发修改。