使用Hash vs Keys在Redis

时间:2017-04-03 22:05:06

标签: session redis

我想在Redis中存储一个大对象,将其分成几部分并分别存储每个部分。这将允许我实现延迟加载部件。该对象分为根对象和叶对象,它们通过代理对象连接到根。当根需要一个对象时,代理会决定是否需要从数据库加载它。

(这是一个PHP项目,其中必须在调用之间加载对象:Request - >(Partial-)加载对象 - > Processing - >响应用户 - >更新数据库)

我想在将对象(序列化)存储在单个键(遵循某些命名空间约定)或哈希表中作为字段/值对之间进行选择。

一个主要的限制是我需要对象在一段时间后过期,并且每次访问后必须更新时间,但对于所有这些,不仅是访​​问的那些。例如,root和obj1,obj5和obj11被加载和修改,但所有其他必须更新到期时间。

到期更新必须由Redis处理,因为root不知道代理中发生了什么,代理无法相互通信。基本上,我需要告诉Reids重置满足某些条件的所有对象的到期计时器。散列使​​得这非常简单,因为可以使用单个命令完成:

EXPIRE hashtable-name 600

(这可以通过一些带键的模式匹配查询来完成吗?)

但是,总而言之,我希望最小化从加载到响应用户的时间。因此,如果密钥给我明显更好的加载时间,而在更新数据库期间投入更多工作,这可能是首选。

某些操作可能只涉及少量加载,但有些操作可能涉及批次(对象的所有部分)。我不确定应该优化哪一项。

谢谢!

1 个答案:

答案 0 :(得分:2)

Hash是您的用例的方式,因为要求一举使所有相关对象失效。使用哈希而不是独立键将不会导致任何有意义的性能损失。