redis 的理想值大小范围是多少? 100KB 太大了吗?

What is the ideal value size range for redis? Is 100KB too large?

Redis 中为特定键存储的值的建议大小是否有上限?

100KB 太大了吗?

Is there an upper limit to the suggested size of the value stored for a particular key in Redis?

根据官方docs,redis中key(String)的最大大小为512MB。

Is 100KB too large?

这取决于应用程序和用途,对于一般用途的应用程序应该没问题。

在决定是否 "too big" 时需要考虑两件事。

Does Redis have support for the size of key/value object that you want to store?

这个问题的答案在 Redis 站点 (https://redis.io/topics/data-types) 上有很好的记录,所以我在这里不再赘述。

For a given key/value size, what are the consequences I need to be aware of?

这是一个更微妙的答案,因为它在很大程度上取决于您如何使用 Redis 以及您的应用程序可以接受哪些行为,哪些行为不可以。

例如,较大的 key/value 大小会导致服务器内存碎片化 space。如果您无论如何都没有使用 Redis 服务器中的所有内存,那么这对您来说可能不是什么大问题。但是,如果您需要尽可能地从 Redis 服务器中挤出所有内存,那么您现在正在降低内存分配的效率,并且您正在失去对一些本来可以拥有的内存的访问权限。

再举一个例子,当您从 Redis 中读取这些大型 key/value 条目时,这意味着您必须通过网络将更多数据从服务器传输到客户端。这样做的一些后果是:

  1. 传输数据需要更多时间,因此您的客户端可能需要配置更高的超时值以允许此额外传输时间。

  2. 在同一 TCP 连接上向服务器发出的请求可能会卡在大传输之后并导致其他请求超时。 See here 示例场景。

  3. 用于传输此数据的网络缓冲区可能会影响客户端或服务器上的可用内存,这可能会加剧已经描述的有关碎片的可用内存问题。

  4. 如果这些大型 key/value 项目被频繁访问,这会放大上述影响,因为您一遍又一遍地重复传输这些数据。

因此,答案不是明确的 "yes" 或 "no",而是您应该考虑并可能针对预期工作量进行测试的一些事项。一般来说,我确实建议我们的客户尽量保持小,我经常说尽量保持在 100kb 以下,但我也看到很多客户使用更大值(在 MB 范围内)的 Redis。有时那些较大的值没什么大不了的。在其他情况下,直到几个月或几年后他们的应用程序的负载或行为发生变化时,这可能才成为问题。