【发布时间】:2017-04-04 07:42:21
【问题描述】:
我想在 Redis 中存储一个大对象,方法是将它分成多个部分并分别存储每个部分。这将允许我实现零件的延迟加载。对象分为根对象和叶对象,叶对象通过代理对象连接到根。当根需要一个对象时,代理决定是否需要从数据库中加载它。
(这是一个 PHP 项目,其中必须在调用之间加载对象:请求 -> (部分)加载对象 -> 处理 -> 响应用户 -> 更新数据库)
我想选择将对象(序列化)存储在单个键(遵循某些命名空间约定)或哈希表中,作为字段/值对。
一个主要的限制是我需要对象在一段时间后过期,并且每次访问后必须更新时间,但对于所有对象,不仅仅是被访问的对象。例如,root 和 obj1、obj5 和 obj11 被加载和修改,但所有其他都必须更新过期时间。
过期更新必须由 Redis 处理,因为根不知道代理中发生了什么,并且代理之间无法相互通信。基本上,我需要告诉 Reids 为所有满足某些条件的对象重置过期计时器。哈希使这变得非常容易,因为可以使用单个命令完成:
EXPIRE hashtable-name 600
(这可以通过一些带有键的模式匹配查询来完成吗?)
但是,总而言之,我希望最大限度地减少从加载到响应用户的时间。因此,如果键给我明显更好的加载时间,同时在更新数据库期间投入更多工作,这可能是首选。
有些操作可能只涉及少量负载,但有些可能涉及很多(对象的所有部分)。我不确定我应该优化哪个。
谢谢!
【问题讨论】: