【发布时间】:2014-06-29 12:53:24
【问题描述】:
我有一个类,它是这样建模的,所有成员变量都由字符串和整数组成。
> class XYZ extends CFormModel
{
//Values required for rendering the Dashboard
public $username;
public $analysis_type;
public $trace_selection;
public $filter_phantoms;
public $trace_oui_map;
public $frame_min;
public $frame_max;
public $time_end;
public $frame_range;
public $time_range;
//Other Values
private $RETURNURL;
private $PARAMS;
private $connection; // connection to db client
private $database; // handle to database
private $col_trace_info; // handle to trace_info collection
private $col_csv; // handle to csv collection
...
...
我想将这个类的这个对象存储在 redis 中 缓存中以提高性能。 我偶然发现的解决方案是使用哈希图..
Yii::app()->cache()->executeCommand("HSET", array("KEY"=>$hashMap, "FIELD"=>$key, "VALUE"=>$object));
我的问题是,有没有更好的方法将对象存储在内存中,通过使用任何其他数据结构或在存储之前对其进行序列化,或者类似的方法??
【问题讨论】:
-
哈希映射确实非常适合您在 Redis 数据类型方面的需求 :) 我几乎一无所知。 Yii 但也许你应该研究一个对象映射器来完成你的繁重工作(不幸的是我不确定 PHP 中有一个)。您还可以考虑仅使用 serialize() 并将整个内容存储为字符串...或查看应该进行对象序列化的 rediska.geometria-lab.net。
-
@ItamarHaber 当您需要泛化层时,使用对象映射器或ORM 确实很有用。对象映射器的缺点是:1. 更多的依赖项 2. 通常是为以前版本的 redis 设计的,所以有时对于 redis 现在可以做的事情不是最佳的 3. 如果您是 redis 新手,它有助于保持简单和直接的。 redis.io 具有如此高的质量 (imo),以至于对象映射器难以跟上。我把我的建议放在下面。
-
@TwBert 我完全同意评论,您的建议一尘不染,但确实需要更深入地熟悉 Redis 等人。 (感谢您为将词法排序引入 Redis BTW 所做的一切)。我向 ORM 方向发展的动机就是您所说的 #3。
-
@ItamarHaber 谢谢你的客气话。我把#3 作为一个缺点 (not 使用 ORM 更直接,而且更容易理解 imo),但这都是值得商榷的。这完全取决于开发人员的偏好和用例。感谢您将 ORM 引入此线程,对未来的 SO 读者有用的信息。
标签: php caching yii redis hashmap