我正在使用 Spring Data Redis。如果 Redis SET 有数百万个值,那么获取它的成员(使用members() 函数)会在堆中创建一个具有一百万个值的 Java 集吗?还是仅按要求获取值?
如果一次性获取所有值,如果 SET 很大,它会抛出一些内存不足错误吗?如果是这样,我该如何克服呢?我对LIST和ZSET的 range() 也有同样的疑问。
我正在使用 Spring Data Redis。如果 Redis SET 有数百万个值,那么获取它的成员(使用members() 函数)会在堆中创建一个具有一百万个值的 Java 集吗?还是仅按要求获取值?
如果一次性获取所有值,如果 SET 很大,它会抛出一些内存不足错误吗?如果是这样,我该如何克服呢?我对LIST和ZSET的 range() 也有同样的疑问。
SD Redis v 1.2 实现RedisSet
没有延迟加载实现。
但是类似add
和的命令remove
被委托给RedisConnection
服务器上的底层执行操作,而不影响任何本地数据。
usingRedisSet.iterator()
将执行SMEMBERS
并将整个响应加载到内存中,这可能会使用相当多的内存。
List
和实现也是如此Maps
。
文档没有提到任何关于延迟加载的内容,因此应该理解,集合的所有元素都是一次获取的。OutOfMemoryError
如果你有大量的集合,这将导致。