Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 在Redis中使用哈希vs键存储对象_Session_Redis - Fatal编程技术网

Session 在Redis中使用哈希vs键存储对象

Session 在Redis中使用哈希vs键存储对象,session,redis,Session,Redis,我想在Redis中存储一个大对象,方法是将它分成若干部分,然后分别存储每个部分。这将允许我实现部件的延迟加载。对象分为根对象和叶对象,它们通过代理对象连接到根。当根用户需要某个对象时,代理服务器决定是否需要从数据库加载该对象 (这是一个PHP项目,在调用之间必须加载对象:请求->(部分)加载对象->处理->响应用户->更新数据库) 我想在将对象(序列化)存储在单个键(遵循某些命名空间约定)或散列表(作为字段/值对)中进行选择 一个主要的限制是,我需要对象在一段时间后过期,并且每次访问后都必须更新

我想在Redis中存储一个大对象,方法是将它分成若干部分,然后分别存储每个部分。这将允许我实现部件的延迟加载。对象分为根对象和叶对象,它们通过代理对象连接到根。当根用户需要某个对象时,代理服务器决定是否需要从数据库加载该对象

(这是一个PHP项目,在调用之间必须加载对象:请求->(部分)加载对象->处理->响应用户->更新数据库)

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

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

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

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

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

有些操作可能只涉及少量负载,但有些操作可能涉及批量(对象的所有部分)。我不确定我应该为哪一个而努力


谢谢

考虑到一次性终止所有相关对象的要求,哈希是用例中的一种方法。使用散列而不是独立键不会导致任何有意义的性能损失