From 830b9a1c0eb330d58b88f0c8b0a7ca0d8148fc05 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 9 Oct 2017 10:47:40 +0300 Subject: [PATCH] RMapCache.getAll doesn't support large keySet. #1089 --- redisson/src/main/java/org/redisson/RedissonMapCache.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonMapCache.java b/redisson/src/main/java/org/redisson/RedissonMapCache.java index 2c01ae9fa..482769042 100644 --- a/redisson/src/main/java/org/redisson/RedissonMapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonMapCache.java @@ -228,10 +228,11 @@ public class RedissonMapCache extends RedissonMap implements RMapCac "local expireHead = redis.call('zrange', KEYS[2], 0, 0, 'withscores'); " + "local currentTime = tonumber(table.remove(ARGV, 1)); " + // index is the first parameter "local hasExpire = #expireHead == 2 and tonumber(expireHead[2]) <= currentTime; " + - "local map = redis.call('hmget', KEYS[1], unpack(ARGV)); " + "local maxSize = tonumber(redis.call('hget', KEYS[5], 'max-size'));" + - "for i = #map, 1, -1 do " + - " local value = map[i]; " + + "local map = {}; " + + "for i = 1, #ARGV, 1 do " + + " local value = redis.call('hget', KEYS[1], ARGV[i]); " + + " map[i] = false;" + " if value ~= false then " + " local key = ARGV[i]; " + " local t, val = struct.unpack('dLc0', value); " +