我有一个redis实例,它在内存中不断增长到我的应用程序逻辑明显出错的地步,我有成千上万的密钥,并想知道哪些是内存的最大用户。有没有一种技术可以解决这个问题?
答案 0 :(得分:6)
使用redis-rdb-tools - https://github.com/sripathikrishnan/redis-rdb-tools
使用-c memory
标志,您将获得一个csv文件,其中包含每个密钥使用的大致内存。它旨在解决您面临的确切问题。
答案 1 :(得分:2)
我认为要走的路不是找出哪个键是最大的,而是你的键具有什么特征 - 即它们拥有什么样的数据。
Redis 不是关系数据库的替代品,它是一个互补的层次(非常重要且用尽但仍然互补)。您可以使用它以各种方式加速对应用程序中数据的访问。这意味着,在一天结束时,Redis可能不应该包含所有,而只包括最常用的数据和/或一般统计数据和聚合。
我不知道你的应用程序的域名,但是在开始时尝试为密钥寻找到期。不经常访问的密钥最终应该被删除。
作为进一步的步骤,我会检查冗余密钥,即 - 以多种形式保存相同的数据。
注意: Redis中的冗余绝对没有问题,事实上这是一个推荐的模式(使用Redis而不进行规范化,有利于每个给定查询的访问速度)。我所建议的是,您可能会发现某些类别的密钥在其他密钥中完全无用,即它们不会增加任何速度优势并且只会给Redis数据库充气。
尝试查看一些可能有助于您探索运行时Redis实例的Redis GUI应用程序: