相关疑难解决方法(0)

实现模型级缓存

我在一个关于MVC缓存的相关问题中发表了一些评论,并提出了一些关于实际实现的问题.如何在没有开发人员需要手动缓存的情况下实现透明工作的模型级缓存,但仍然保持高效?

我会将我的缓存职责牢牢地放在模型中.它不是模型获取数据的控制器或视图业务.他们关心的是,当请求数据时,提供数据 - 这就是MVC范例应该如何工作的.

(来源:Jarrod发布)

我怀疑的原因是,除非有真正的需要,否则通常不应该进行缓存,不应该对搜索结果这样的事情进行缓存.因此,模型本身必须知道发给它的SELECT语句是否值得缓存.模型不是必须天文学上聪明,和/或存储长时间最常查询的内容的统计数据,以便准确地做出决定吗?并不是所有这些的开销不会使缓存无用吗?

如何从另一个查询中唯一标识查询(或者更确切地说,从另一个结果集中识别结果集)?如果您使用预准备语句,只根据用户输入改变参数,那该怎么办?

另一张海报说:

我建议使用查询的md5哈希值和输入参数的序列化版本.

碰撞的微小机会值得担心吗?

从概念上讲,模型中的缓存似乎对我来说是一个好主意,但它看起来很实用,并且由于缓存的性质,开发人员应该直接控制它并明确地将其编码到控制器逻辑中.


更新赏金

我确实使用了一个非常轻量级的ORM,有点类似于ActiveRecord,但是能够在没有n^2问题的情况下进行复杂的连接和子查询.我自己构建它,所以它很灵活,并且在关系或列名方面没有限制,我只是想了解我应该如何实现缓存机制.

根据乐于助人的建议,我会将查询的哈希值(可能是md5)与其参数列表连接起来,并将其用作该特定数据存储的键.我应该在需要它的Model类中单独实现缓存,还是应该成为ORM层的一部分?

我怎么知道什么时候应该失效?我是否必须手动解析UPDATE/DELETE/INSERT查询和子参数以找出正在修改的记录?或者更糟糕的是,每当修改数据时都要进行其他查询,以便跟踪哪些内容发生了变化,哪些内容应该失效?

我将奖励那些可以给我一个明确的概念性解释的人(无论这是否真的必须/有效地透明地完成),如果是这样,有一些模型缓存的实现细节.我正在使用PHP和MySQL,如果这有助于缩小你的注意力.

php database model-view-controller caching

13
推荐指数
2
解决办法
1961
查看次数

标签 统计

caching ×1

database ×1

model-view-controller ×1

php ×1