【问题标题】:Redis keys are getting deleted automaticallyRedis 键被自动删除
【发布时间】:2016-11-05 08:57:50
【问题描述】:

我们使用 redis 作为缓存。在某些情况下,某些密钥被删除而我们找不到原因。我将CONFIG SET notify-keyspace-events KEgxe 的redis keyspace/keyevent 放在此通知上,我正在放置日志。但是我在我的核心日志和这个 redis 日志中都找不到某些键。他们在 RDBMS 中有一些数据,所以我们确信这些键一定已经进入 Redis。我们非常陷入迷失状态,我们应该在什么基础上进行调试。

Redis 信息说它的使用量约为 100mb,这在我看来还可以。如何持久化数据和密钥。

【问题讨论】:

    标签: java redis jedis


    【解决方案1】:

    2 个可能的原因:

    1. 客户端无法写入 Redis
    2. 一些客户端删除了这些缺失的键

    您可以尝试订阅有关关键更改的所有内容:CONFIG SET notify-keyspace-events AKE,并将这些更改记录到日志中以找出问题。

    【讨论】:

    • 第一点,至少对于某些键,我确信它们在 redis 中,正如我所看到的那样。对于第二点,我使用KEgxe 进行日志记录,我认为这对于 del、expire ... 已经足够了,因为日志记录 AKE 将是所有事件。无论如何,我会放AKE 并小心。谢谢。
    • 嗨@for_stack,我也试过AKE,但我在日志中找不到任何东西。它只是变得更糟。我有一些疑问,机器或redis重新启动,但在这种情况下我应该得到连接错误。如果 redis 对键的数量或大小有最大限制,那么策略是 lru。我的问题是,如果 redis '清除'这些键,那也会进入键空间通知
    • @theGamblerRises 如果 redis 过期或驱逐,它会发送通知。您的应用程序是否有可能意外调用flushdbflushall?由于这些命令影响的键太多,Redis 不会发送任何通知。
    • 你是对的。我们的端口是开放的,一些外部 ip 放了 flushall 命令。我必须监控并记录这些值。学习到教训了。谢谢
    • @theGamblerRises 好的,有人故意删除了这些密钥。通常,您应该限制对 Redis 的访问。例如,使用--bind 127.0.0.1 禁止来自其他主机的任何连接。
    【解决方案2】:

    是的,有人试图侵入您的 redis 服务器。 最好对其进行身份验证,或者更好地通过 IP 对其进行限制 更多细节在这里 - https://www.reddit.com/r/redis/comments/bv6uys/redis_keys_randomly_getting_deleted/

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 公平点@AdamMarshall I 链接的重要部分是许多机器人一直在寻找打开的redis实例。我个人很惊讶,我一启动它就被黑了。它解释了 75% 的开放式 redis 服务器是如何受到这种攻击的。此外,如果您在 redis 集群中看到以下键 - backup1、backup2、backup3、backup4,那么它很可能是与您的 redis 实例混淆的机器人
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2018-03-10
    • 2015-06-03
    • 2014-01-30
    • 1970-01-01
    • 2021-11-11
    • 2020-10-13
    • 2019-12-31
    相关资源
    最近更新 更多