Как я могу сделать RedisOperationsвместо? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь предотвратить состояние гонки в 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> вместо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...