cursedcoder / dark-redis-list-bundle
Symfony2 扩展包,允许您将 doctrine 实体数据的一部分存储在 Redis 中。
dev-master
2013-03-12 13:07 UTC
Requires
- php: >=5.3.2
- doctrine/orm: 2.2.*@stable
- snc/redis-bundle: 1.1.*@stable
- symfony/framework-bundle: >=2.1.0
This package is not auto-updated.
Last update: 2024-09-14 12:27:39 UTC
README
Symfony2 扩展包,允许您将 doctrine 实体数据的一部分存储在 Redis 中。更多详情请参阅以下文本。
如何在 MySQL 中管理列表
- 编写查询,例如 'SELECT a FROM MyTestBundle:Post a ORDER BY a.created_at'
- 使用 doctrine 仓库
然后我们可以将其传递给分页器,但这里不展开讨论。
但我需要更多列表功能
- 将多个实体类型组合成一个列表/查询
- 获取实时结果
- 为每个实体使用永久缓存
- 它应该很快
介绍 Redis 列表
Redis 列表 - 它是存储在 Redis 哈希中的结构化数据(不要将本地的 Redis 列表与我们的混淆)。好的,让我们来了解更多。
Redis 列表是什么?
每个列表都有一个名称,例如 - 'View',这个哈希中的每个元素都有一个唯一的 ID,并包含一些值。
这是一个 Redis 列表的示例
Hash ID Value
View — 1 — SonataBadBundle:Post;1
View — 2 — SonataBadBundle:Post;2
View — 3 — SonataBadBundle:Post;3
View — 4 — KnpGoodBundle:Article;1
View — 5 — MyPromoBundle:Promo;1
所以,如您所见,每个哈希
- 从 1 id 开始
- 所有 ID 都是连续的(元素总数 = 最后一个元素 ID)
好的,但它如何满足我的需求呢?
Each element of Redis List contains information about entities — repository name, id.
I can fetch those entities through repository, and then cache it in Memcached for example.
它带给您的功能
- 实时列表结果
- 可以永久存储实体在缓存中
- 如果新元素传递到列表中,不需要从数据库重新加载旧实体
- 允许将几种类型的实体作为列表列出
- 允许从列表中自由列出随机实体,因为 ID 是连续的,也不需要从数据库获取它们
安装
在您的 composer.json 中添加 DarkRedisListBundle
{ "require": { "cursedcoder/dark-redis-list-bundle": "*" } }
在您的 app/AppKernel.php
中注册该扩展包
<?php public function registerBundles() { $bundles = array( // ... new Dark\RedisListBundle\DarkRedisListBundle(), ); )
收集器
- 单个 - 一次获取一个实体(每个实体 1 请求)
- 部分 - 按部分获取实体,例如对于列表 "Post1, Post2, Answer1, Answer2, Post3, Post4",它将进行 3 次请求
监听器
Redis 监听器自动将 Redis 数据加载到您的实体中。默认情况下已启用。
配置参考
# app/config.yml dark_redis_list: collector: single # or pieces template: DarkRedisListBundle:Pagination:list.html.twig time: 604800 # cache lifetime, 0 by default use_listener: true
致谢
我编写了这个扩展包以满足自己的需求,所以如果有什么不好的地方请不要生气 :P