redis 是否提供了对缓存对象进行部分更新的选项
is there option provided by redis to do partial updates to cache objects
我正在使用 JCA(java 缓存 api) 在 redis 中存储数据,其中键是字符串,值是对象,即 JSON 字符串。
我需要对缓存值执行部分更新而不是使用键检索缓存值,然后修改属性并使用最新的缓存值执行放置操作
{
"attribute1" : "value1",
"attribute2 " : [
{
"attribute3" : "value3"
}
]
}
以上是示例 json 格式。如上所述,是否可以将 attribute1
的值从 value1
更新为 value2
而无需使用 redis
中的键获取缓存值
您可以使用 Lua 脚本,以便使用 CJSON Lua 库更新项目。我在
上分享了一个类似的例子
不熟悉 JCA,所以不确定您的客户端是否可以简化发送 EVAL 命令的过程。
假设你使用的是JCacheAPI(即JSR-107),你可以使用Cache#invoke(K key, EntryProcessor<K,V,T> entryProcessor, Object... arguments)
to perform an update in-place instead of get-then-put. According to EntryProcessor
javadoc,Cache#invoke
是在key上自动执行的,所以你不必担心对同一缓存条目的并发修改。
我正在使用 JCA(java 缓存 api) 在 redis 中存储数据,其中键是字符串,值是对象,即 JSON 字符串。 我需要对缓存值执行部分更新而不是使用键检索缓存值,然后修改属性并使用最新的缓存值执行放置操作
{
"attribute1" : "value1",
"attribute2 " : [
{
"attribute3" : "value3"
}
]
}
以上是示例 json 格式。如上所述,是否可以将 attribute1
的值从 value1
更新为 value2
而无需使用 redis
您可以使用 Lua 脚本,以便使用 CJSON Lua 库更新项目。我在
不熟悉 JCA,所以不确定您的客户端是否可以简化发送 EVAL 命令的过程。
假设你使用的是JCacheAPI(即JSR-107),你可以使用Cache#invoke(K key, EntryProcessor<K,V,T> entryProcessor, Object... arguments)
to perform an update in-place instead of get-then-put. According to EntryProcessor
javadoc,Cache#invoke
是在key上自动执行的,所以你不必担心对同一缓存条目的并发修改。