Я пытаюсь предотвратить состояние гонки в 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> вместо ?
я думаю, вы не можете написать лямбда-выражение для SessionCallback, потому что метод execute имеет общие параметры
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он относится к обзору кода.
я изменил свой вопрос




Если он работает правильно, то Code Review, как правило, лучше SE.