Redis中为特定键存储的建议值的大小是否有上限?
100KB太大了吗?
答案 0 :(得分:1)
Redis中为特定键存储的建议值的大小是否有上限?
根据官方docs,redis中key(String)的最大大小为512MB。
100KB太大了吗?
这取决于应用程序和用途,对于一般用途的应用程序应该没问题。
答案 1 :(得分:1)
在确定某事物是否“太大”时,需要考虑两件事。
Redis是否支持您要存储的键/值对象的大小?
在Redis网站(https://redis.io/topics/data-types)上已很好地记录了该问题的答案,因此在此我将不做详细介绍。
对于给定的键/值大小,我需要了解什么后果?
这是一个更加细微的答案,因为它很大程度上取决于您使用Redis的方式以及应用程序可接受的行为,哪些行为不可接受。
例如,较大的键/值大小可能导致服务器内的内存空间碎片化。如果您仍未使用Redis服务器中的所有内存,那么这对您来说可能并不重要。但是,如果您需要从Redis服务器中挤出所有内存,那么现在您将降低内存分配方式的效率,并且将失去对原本应有的某些内存的访问权限。
作为另一个示例,当您从Redis读取这些大键/值条目时,这意味着您必须通过网络将更多数据从服务器传输到客户端。这样做的一些后果是:
传输数据需要花费更多时间,因此您的客户端可能需要配置更高的超时值,以允许此额外的传输时间。
在同一TCP连接上向服务器发出的请求可能会滞留在大传输之后,并导致其他请求超时。 See here作为示例场景。
您用于传输此数据的网络缓冲区可能会影响客户端或服务器上的可用内存,这可能会加剧有关碎片的已描述的可用内存问题。
如果频繁访问这些大键/值项,则会放大上述影响,因为您要一遍又一遍地重复传输此数据。
因此,答案不是明确的“是”或“否”,而是您应该考虑并可能测试预期工作量的一些事项。总的来说,我确实建议客户尽量保持较小,我经常说要保持在100kb以下,但是我也看到很多客户使用Redis的较大值(在MB范围内)。有时,那些较大的值没什么大不了的。在其他情况下,直到数月或数年后应用程序的负载或行为发生变化,这才可能成为问题。