- 10.3. 命令的批量执行
10.3. 命令的批量执行
多个连续命令可以通过RBatch对象在一次网络会话请求里合并发送,这样省去了产生多个请求消耗的时间和资源。这在Redis中叫做管道。
用户可以通过以下方式调整通过管道方式发送命令的方式:
BatchOptions options = BatchOptions.defaults()// 指定执行模式//// ExecutionMode.REDIS_READ_ATOMIC - 所有命令缓存在Redis节点中,以原子性事务的方式执行。//// ExecutionMode.REDIS_WRITE_ATOMIC - 所有命令缓存在Redis节点中,以原子性事务的方式执行。//// ExecutionMode.IN_MEMORY - 所有命令缓存在Redisson本机内存中统一发送,但逐一执行(非事务)。默认模式。//// ExecutionMode.IN_MEMORY_ATOMIC - 所有命令缓存在Redisson本机内存中统一发送,并以原子性事务的方式执行。//.executionMode(ExecutionMode.IN_MEMORY)// 告知Redis不用返回结果(可以减少网络用量).skipResult()// 将写入操作同步到从节点// 同步到2个从节点,等待时间为1秒钟.syncSlaves(2, 1, TimeUnit.SECONDS)// 处理结果超时为2秒钟.responseTimeout(2, TimeUnit.SECONDS)// 命令重试等待间隔时间为2秒钟.retryInterval(2, TimeUnit.SECONDS);// 命令重试次数。仅适用于未发送成功的命令.retryAttempts(4);
使用方式如下:
RBatch batch = redisson.createBatch();batch.getMap("test").fastPutAsync("1", "2");batch.getMap("test").fastPutAsync("2", "3");batch.getMap("test").putAsync("2", "5");batch.getAtomicLongAsync("counter").incrementAndGetAsync();batch.getAtomicLongAsync("counter").incrementAndGetAsync();BatchResult res = batch.execute();// 或者Future<BatchResult> asyncRes = batch.executeAsync();List<?> response = res.getResponses();res.getSyncedSlaves();
在集群模式下,所有的命令会按各个槽所在的节点,筛选分配到各个节点并同时发送。每个节点返回的结果将会汇总到最终的结果列表里。
