使用 Spring Boot 在 Redis 中嵌套键
Nested keys in redis using Spring Boot
我想 运行 在 spring 中使用 quartz 引导作业,其中多个线程将执行该方法。
我想要的是将每次处理的结果保存在redis中,这样我就可以知道工作做得有多好。
我想把数据以这种形式存在redis中
{
"2020-04-20": [
{
"item_1": {
"success": "true",
"message": ""
}
},
{
"item_2": {
"success": "true",
"message": ""
}
}
]
}
我想在关键日期插入所有项目。
由于多个线程在工作,每个线程都在处理某个项目。所以所有项目都应该只插入到键(日期)中。
可能吗?
一种解决方案是一次又一次地覆盖(日期)键的数据,首先从redis中获取数据,在其上附加项目,然后再次将键保存到redis中。
有没有其他方法,或者使用@cacheable、@cacheput 等注释,以便我可以创建嵌套键。项目自动附加在(日期)键中。
你考虑过RedisJSON吗?
像这样的事情(我没有测试过,我手边没有 RedisJSON)
JSON.SET "2020-04-20" . [] // create the object once
JSON.ARRAPPEND "2020-04-20". '{ // every thread issues a command like this.
"item": {
"success": "true",
"message": "thread 123"
} }'
JSON.ARRAPPEND "2020-04-20". '{ // every thread issues a command like this.
"item": {
"success": "true",
"message": "thread 456"
} }'
JSON.ARRAPPEND
应该是原子的。
我使用 redis set 功能解决了这个问题。
我在我的项目中使用 jedis 客户端。
It has very useful funtions like:-
1) sadd => insertion of element.O(1)
2) srem => deletion of element in set.O(1)
3) smembers => getting all results.O(N)
这就是我需要的。
在我的例子中,日期是关键,其他细节(json 的一个对象)是集合的成员。因此,在集合中添加成员时,我将 json 转换为数据字符串,而在获取数据时,我将其从字符串转换回 json。
这解决了我的问题。
注意:- 还可以使用列表功能。但是列表的时间复杂度不是 O(1)。就我而言,我确定我不会有重复项,所以设置对我有用。
我想 运行 在 spring 中使用 quartz 引导作业,其中多个线程将执行该方法。 我想要的是将每次处理的结果保存在redis中,这样我就可以知道工作做得有多好。
我想把数据以这种形式存在redis中
{
"2020-04-20": [
{
"item_1": {
"success": "true",
"message": ""
}
},
{
"item_2": {
"success": "true",
"message": ""
}
}
]
}
我想在关键日期插入所有项目。 由于多个线程在工作,每个线程都在处理某个项目。所以所有项目都应该只插入到键(日期)中。
可能吗?
一种解决方案是一次又一次地覆盖(日期)键的数据,首先从redis中获取数据,在其上附加项目,然后再次将键保存到redis中。
有没有其他方法,或者使用@cacheable、@cacheput 等注释,以便我可以创建嵌套键。项目自动附加在(日期)键中。
你考虑过RedisJSON吗? 像这样的事情(我没有测试过,我手边没有 RedisJSON)
JSON.SET "2020-04-20" . [] // create the object once
JSON.ARRAPPEND "2020-04-20". '{ // every thread issues a command like this.
"item": {
"success": "true",
"message": "thread 123"
} }'
JSON.ARRAPPEND "2020-04-20". '{ // every thread issues a command like this.
"item": {
"success": "true",
"message": "thread 456"
} }'
JSON.ARRAPPEND
应该是原子的。
我使用 redis set 功能解决了这个问题。 我在我的项目中使用 jedis 客户端。
It has very useful funtions like:-
1) sadd => insertion of element.O(1)
2) srem => deletion of element in set.O(1)
3) smembers => getting all results.O(N)
这就是我需要的。 在我的例子中,日期是关键,其他细节(json 的一个对象)是集合的成员。因此,在集合中添加成员时,我将 json 转换为数据字符串,而在获取数据时,我将其从字符串转换回 json。 这解决了我的问题。
注意:- 还可以使用列表功能。但是列表的时间复杂度不是 O(1)。就我而言,我确定我不会有重复项,所以设置对我有用。