Java Redis与DB通信

Java Redis与DB通信,java,sql,database,architecture,redis,Java,Sql,Database,Architecture,Redis,我正在开发一个相册系统,并决定使用Redis。我保存用户的照片数据,用户在Redis中拥有哪些照片。例如:photos:1000:pid[1,24525,12,42,62,56]表示id为1000的用户在id列表中拥有照片。我困惑的是,当我得到[1,24525,12,42,62,56]时,我如何才能得到照片的细节?我想再次使用Redis获取照片细节。然而,当一个用户有150张照片时,在一个循环中使用绝地从java一张一张地获取照片需要100-150毫秒,这不适合我的情况。我必须控制高流量。响应时

我正在开发一个相册系统,并决定使用Redis。我保存用户的照片数据,用户在Redis中拥有哪些照片。例如:photos:1000:pid[1,24525,12,42,62,56]表示id为1000的用户在id列表中拥有照片。我困惑的是,当我得到[1,24525,12,42,62,56]时,我如何才能得到照片的细节?我想再次使用Redis获取照片细节。然而,当一个用户有150张照片时,在一个循环中使用绝地从java一张一张地获取照片需要100-150毫秒,这不适合我的情况。我必须控制高流量。响应时间不应超过100毫秒


我决定使用DB,通过使用存储过程,一次完成,让所有内容都知道它们被索引的照片ID。从Redis获取ID,从DB获取详细信息是正确的方法吗?对于这种情况,您会怎么做?

我不建议使用两个不同的商店。保持简单。考虑数据的一致性。如果您更熟悉关系数据库,那么将其用于所有数据并没有什么错

现在,如果您想在Redis中存储所有内容,也可以这样做,前提是您可以预测数据的所有访问路径

对于Redis,如果您将这些命令捆绑在同一个rountrip中,那么运行多个命令来获取一些数据是非常有效的。Redis服务器和大多数客户端完全支持。假设你使用绝地武士,你可以找到一些例子

事实上,有多种方法可以解决你的问题

假设您有以下模型:

photos:<userid> -> set of photo IDs for a given user ID
photo:<photoid> -> hash of photo properties for a give photo ID
如果您感兴趣的是检索特定的照片属性,例如给定用户的名称和大小,如选择名称、来自…的大小,则可以使用单个排序命令来完成

 SORT photos:<userid> by nosort get # get photo:*->name photo:*->size
如果您感兴趣的是检索给定用户的所有照片属性,如select*from…,那么它就有点复杂了

一种解决方案是使用管道并执行两次往返:

使用SMEMBERS获取照片ID集的第一次往返 第二次往返管道所有HGETALL命令一张照片
另一种解决方案是在服务器端执行所有聚合。复杂度更高,但成本仅为一次往返。

将所有细节放在redis中,放在hash类型的键中有什么问题?redis没有搜索功能。我可以说,从ownerid=1000的照片中选择*以获得包含所有所需字段的特定照片集吗?这不是您的做法。可以创建具有多种用途的多个关键点。例如,一个键保存给定所有者的所有照片。然后另一个键保存每个特定照片的详细信息。因此,我从user:1000:photos键获得了100个照片ID,该键保存了用户的所有照片ID。我如何从照片::dtls哈希中获取这100张照片的详细信息?我必须为每个照片id运行100次,对吗?这是我在问题中提到的主要问题。