I need to delete a pool from redis cache. However, this pool might have millions of keys. I am using following code to delete the keys from cache
String regex = "*." + poolname + ".*";
Set<String> rkeys = jedis.keys(regex);
for (String key : rkeys) {
LOGGER.info("key ===>" + key);
jedis.del(key);
}
I am afraid that redis server might crash in case, there are million rows. Is there any way I can tell redis to select only 100 rows and delete at time. Something like
while (true) {
//sleep for 1 minute
//get 100 rows from cache
if (keys.isEmpty()) {
break;
}
jedis.del(key);
}
Redis shouldn't ever crash, and I would test the scenario before making my code more complicated on a hunch. I just created a million keys and deleted them. It took 2 minutes and the bottleneck was the ruby client, not redid.
That said, you may want to check out https://redis.io/commands/unlink, which is a new non-blocking version of DEL.