我想在Redis中存储一个大对象,将其分成几部分并分别存储每个部分。这将允许我实现延迟加载部件。该对象分为根对象和叶对象,它们通过代理对象连接到根。当根需要一个对象时,代理会决定是否需要从数据库加载它。
(这是一个PHP项目,其中必须在调用之间加载对象:Request - >(Partial-)加载对象 - > Processing - >响应用户 - >更新数据库)
我想在将对象(序列化)存储在单个键(遵循某些命名空间约定)或哈希表中作为字段/值对之间进行选择。
一个主要的限制是我需要对象在一段时间后过期,并且每次访问后必须更新时间,但对于所有这些,不仅是访问的那些。例如,root和obj1,obj5和obj11被加载和修改,但所有其他必须更新到期时间。
到期更新必须由Redis处理,因为root不知道代理中发生了什么,代理无法相互通信。基本上,我需要告诉Reids重置满足某些条件的所有对象的到期计时器。散列使得这非常简单,因为可以使用单个命令完成:
EXPIRE hashtable-name 600
(这可以通过一些带键的模式匹配查询来完成吗?)
但是,总而言之,我希望最小化从加载到响应用户的时间。因此,如果密钥给我明显更好的加载时间,而在更新数据库期间投入更多工作,这可能是首选。
某些操作可能只涉及少量加载,但有些操作可能涉及批次(对象的所有部分)。我不确定应该优化哪一项。
谢谢!
答案 0 :(得分:2)
Hash是您的用例的方式,因为要求一举使所有相关对象失效。使用哈希而不是独立键将不会导致任何有意义的性能损失。