cursedcoder/dark-redis-list-bundle

Symfony2 扩展包,允许您将 doctrine 实体数据的一部分存储在 Redis 中。

安装: 13

依赖者: 0

建议者: 0

安全: 0

星标: 5

关注者: 2

分支: 2

开放问题: 0

类型:symfony-bundle

dev-master 2013-03-12 13:07 UTC

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