在 symfony4 中为 redis 设置无键前缀

Posted

技术标签:

【中文标题】在 symfony4 中为 redis 设置无键前缀【英文标题】:Setting no key prefix in symfony4 for redis 【发布时间】:2018-11-04 00:15:46 【问题描述】:

我在 Symfony 4 中对 redis 的正确配置有问题。我想在我的缓存项键之前没有前缀,但它一直在显示。这是我的config/packages/framework.yaml(与缓存相关的部分):

cache:
    prefix_seed: ztw/ztw
    app: cache.adapter.redis
    default_redis_provider: '%env(resolve:REDIS_URL)%'

我尝试删除 prefix_seed 键并将其值设置为 ~。没有任何效果。但是,文档指出其默认值为 null

我想实现这一点,因为当我通过网站启动我的网站时,它会设置一些关键并坚持下去。但是当我运行我的行为测试时(故意 - 填充缓存) - 键是不同的,无论如何。两者都使用APP_ENV=dev 环境变量值(检查两次)。

这是redis方面发生的事情:

127.0.0.1:6379> keys *
 1) "xw+Y6oICD-:4dfbddf6bbb8ea2e25e843d936739dd9"
 2) "xw+Y6oICD-:4f1cbb7ece6f8db3b69ae11418bbf022"
 3) "xw+Y6oICD-:26c65dcee950a5020596989ad1a8ff66"
 4) "gUbUjDoAuQ:b712bf9832f566bd5bd30a07e7bd146b"
 5) "gUbUjDoAuQ:1d0f56bf67bd482674b62067336bd633"
 6) "xw+Y6oICD-:d948f5e23f94e681620436786f0daf98"
 7) "xw+Y6oICD-:ef88ab906981c6e04ef639cd4a8ae803"
 8) "xw+Y6oICD-:748d18ce6ba0929d2540e9b4529e56cc"
 9) "xw+Y6oICD-:ef30ff7e239b92cec1f5e58c201296f5"
10) "xw+Y6oICD-:1d0f56bf67bd482674b62067336bd633"
11) "xw+Y6oICD-:b712bf9832f566bd5bd30a07e7bd146b"
12) "xw+Y6oICD-:4da534491b5732336b3bb3e7302bc79b"

不幸的是,例如第 4 项和第 11 项具有相同的键(和值)但前缀不同。

我知道缓存键前缀被认为是一种很好的做法,但由于某种原因,通过 behat 键运行时是不同的。

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

上面提到的prefix_seed是symfony缓存文件(无关redis)的前缀。

redis 前缀的默认值为phpREDIS_SESSION:,它解释了您上面提到的键,我没有尝试过,但我认为您需要在@987654326 中添加prefix 选项并将其设置为空字符串@。

查看predis自述文件:https://github.com/phpredis/phpredis

编辑:根据文档,似乎只能通过 predis 设置额外的设置。

使用 Predis 库时,一些额外的 Predis 特定选项 可用。引用 Predis 连接参数 文档以获取更多信息。

来源:https://symfony.com/doc/current/components/cache/adapters/redis_adapter.html

【讨论】:

如果我不使用 predis 怎么办?

以上是关于在 symfony4 中为 redis 设置无键前缀的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 4:如何在防火墙中为用户/管理员提供多个提供者?

在 Laravel 中仅返回值(无键/关联数组)

Flutter:JSON无键数组到列表

复合文字使用无键字段

如何使用无键实体类型在 EF 模型中定义查询?

如何将主无键实体插入表?