session - 使用哈希与键在 Redis 中存储对象

标签 session redis

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

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

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

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

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

EXPIRE hashtable-name 600

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

但是,总而言之,我希望最大限度地缩短从加载到响应用户的时间。因此,如果键给我带来明显更好的加载时间,同时在更新数据库期间投入更多工作,那么这可能是首选。

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

谢谢!

最佳答案

考虑到需要一次性使所有相关对象过期,哈希是您的用例中的最佳选择。使用哈希代替独立键不会导致任何有意义的性能损失。

关于session - 使用哈希与键在 Redis 中存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195105/

相关文章:

java - JSP 的 servlet session 失效问题

mysql - 使用 MySqlSessionStateStore 时, key 'vtfszyfxemkrwu52hjyugphb-1' 的重复条目 'PRIMARY'

php - session 不适用于 wamp 但适用于实时服务器

node.js - 使用 session 时 Express.js 没有响应

json - 在redis中存储多个嵌套对象

redis - redis 是否串行处理命令?

asp.net-mvc - 当 ASP.NET MVC session 过期时注销用户

java - 从 Spring Security 登录过程访问 HTTP Session

python - 为什么这个gevent程序中只与redis建立了一个连接?

c# - .Net Core 2.0 内部服务器错误与 Redis 缓存