Redisson为每个操作都提供了自动重试策略,当某个命令执行失败时,Redisson会自动进行重试。自动重试策略可以通过修改retryAttempts
(默认值:3)参数和retryInterval
(默认值:1000毫秒)参数来进行优化调整。当等待时间达到retryInterval
指定的时间间隔以后,将自动重试下一次。全部重试失败以后将抛出错误。
Redisson实例本身和Redisson框架提供的所有对象都是线程安全的。
Redisson框架提供的几乎所有对象都包含了同步和异步相互匹配的方法。这些对象都可以通过RedissonClient
接口获取。同时还为大部分Redisson对象提供了满足异步流处理标准的程序接口RedissonReactiveClient
。
以下是关于使用RAtomicLong
对象的范例:
RedissonClient client = Redisson.create(config);
RAtomicLong longObject = client.getAtomicLong('myLong');
// 同步执行方式
longObject.compareAndSet(3, 401);
// 异步执行方式
longObject.compareAndSetAsync(3, 401);
RedissonReactiveClient client = Redisson.createReactive(config);
RAtomicLongReactive longObject = client.getAtomicLong('myLong');
// 异步流执行方式
longObject.compareAndSet(3, 401);
3.1. 异步执行方式
几乎所有的Redisson对象都实现了一个异步接口,异步接口提供的方法名称与其同步接口的方法名称相互匹配。例如:
// RAtomicLong接口继承了RAtomicLongAsync接口
RAtomicLongAsync longObject = client.getAtomicLong("myLong");
RFuture<Boolean> future = longObject.compareAndSetAsync(1, 401);
异步执行的方法都会返回一个实现了RFuture
接口的对象。通过向这个对象添加监听器可以实现非阻塞的执行方式。
// JDK 1.8+ 适用
future.whenComplete((res, exception) -> {
// ...
});
// 或者
future.thenAccept(res -> {
// 处理返回
}).exceptionally(exception -> {
// 处理错误
});
// JDK 1.6+ 适用
future.addListener(new FutureListener<Boolean>() {
@Override
public void operationComplete(Future<Boolean> future) throws Exception {
if (future.isSuccess()) {
// 取得结果
Boolean result = future.getNow();
// ...
} else {
// 对发生错误的处理
Throwable cause = future.cause();
}
}
});
3.2. 异步流执行方式
Redisson提供了满足Reactor项目的异步流处理标准的程序接口。所有Redisson异步流对象都可以通过一个单独的RedissonReactiveClient
接口来获取。该功能要求JDK 7或以上版本。使用范例如下:
RedissonReactiveClient client = Redisson.createReactive(config);
RAtomicLongReactive longObject = client.getAtomicLong("myLong");
Publisher<Boolean> csPublisher = longObject.compareAndSet(10, 91);
Publisher<Long> getPublisher = longObject.get();
也可以在RxJavaReactiveStreams项目的帮助下,通过使用RxJava标准来达到使用异步流处理标准的目的。
例如:
RMap<String, Integer> map = client.getMap("mapMap");
Observable<Integer> observable = RxReactiveStreams.toObservable(map.put("1", 324));