Redis 中特定键存储的值的建议大小是否有上限?
100KB 太大了吗?
最佳答案
在决定某件事是否“太大”时,您需要考虑两件事。
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 以及您的应用程序可以接受哪些行为,哪些行为不可以。
例如,较大的键/值大小可能会导致服务器内的内存空间碎片。如果您没有使用 Redis 服务器中的所有内存,那么这对您来说可能不是什么大问题。但是,如果您需要从 Redis 服务器中挤出所有内存,那么您现在就会降低内存分配的效率,并且您将无法访问原本拥有的一些内存。
再举一个例子,当您从 Redis 读取这些大型键/值条目时,这意味着您必须通过网络从服务器向客户端传输更多数据。这样做的一些后果是:
传输数据需要更多时间,因此您的客户端可能需要配置更高的超时值以允许额外的传输时间。
在同一 TCP 连接上向服务器发出的请求可能会陷入大传输,并导致其他请求超时。 See here示例场景。
用于传输此数据的网络缓冲区可能会影响客户端或服务器上的可用内存,这可能会加剧已经描述的有关碎片的可用内存问题。
如果频繁访问这些大型键/值项,则会放大上述影响,因为您会一遍又一遍地重复传输此数据。
因此,答案不是明确的"is"或“否”,而是您应该考虑并可能测试您的预期工作负载的一些事情。一般来说,我确实建议我们的客户尽量保持较小的大小,我经常说要尽量保持在 100kb 以下,但我也看到很多客户使用更大的值(在 MB 范围内)的 Redis。有时那些较大的值没什么大不了的。在其他情况下,直到几个月或几年后,当应用程序的负载或行为发生变化时,这可能才成为问题。
关于azure - Redis 的理想值大小范围是多少? 100KB 太大了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517224/