2

I have an inventory list of Millions of records that I want to insert/merge in batches in Redis using Redisson Batch command. below is the code

public void upsertInventoryInBatches(final List<ItemInventory> itemInventory) throws ExecutionException, InterruptedException {
    RBatch batch = redissonClient.createBatch(BatchOptions.defaults().responseTimeout(300, TimeUnit.SECONDS));
    RMapAsync<String, ItemInventory> map = batch.getMap(IMSConstant.REDIS_INVENTORY_MAP);
    try {
        for (ItemInventory item : itemInventory) {
            map.mergeAsync(item.getKey(), item, (existing, newValue) -> {
                if (existing == null) {
                    return newValue;
                } else {
                    if (existing.getQuantity() == newValue.getQuantity()
                            && existing.getMinMRP() == newValue.getMinMRP()) {
                        return existing;
                    }
                    existing.setQuantity(item.getQuantity());
                    existing.setMinMRP(item.getMinMRP());
                    existing.setEarliestExpiryDate(item.getEarliestExpiryDate());
                    existing.setVersion(item.getVersion());
                    return existing;
                }
            });
}

    var res = batch.execute();  // Hangs with no result and no error
    } catch (Exception e) {
        System.out.println(e.getMessage());

    }

thebatch.execute statement just hangs with no error and no output. Looking for guidance on what I am doing wrong. batch.getMap(IMSConstant.REDIS_INVENTORY_MAP).putAsync(item.getKey(), item) works fine but I want to merge the values. if its not possible with redisson, Is it possible via any redis java client?

Shivang MIttal
  • 990
  • 1
  • 14
  • 36

0 Answers0