Я пытаюсь предотвратить состояние гонки в Redis, используя пессимистическую блокировку.
Вот что я сделал до сих пор:
@Override
public void put(final Subscription subscription) {
final String username = subscription.getUsername();
redisTemplate.execute(new SessionCallback<List<Subscription>>() {
@Override
public <K, V> List<Subscription> execute(RedisOperations<K, V> ops) {
ops.multi();
ops.watch((K) SUBSCRIPTION);
final List<Subscription> list = (List<Subscription>) ops.opsForHash().get((K) SUBSCRIPTION, username);
final List<Subscription> updated = orEmpty(list);
updated.removeIf(s -> s.getId().equals(generateId(username, subscription.getTargetUsername())));
updated.add(subscription);
ops.opsForHash().put((K) SUBSCRIPTION, username, updated);
ops.exec();
return updated;
}
});
}
Этот фрагмент кода выглядит ужасно и содержит многопредупреждений.
Я хотел бы переписать его в лямбду или, по крайней мере, сгенерировать его.
Как я могу сделать RedisOperations> вместо?