如何使RedisOperations <string,list <subscription =“” >>代替<k,v =“”>?

时间:2019-02-08 00:16:05

标签: java lambda redis

我正在尝试通过使用悲观锁来防止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;
        }
    }); 
}

这段代码看起来很糟糕,并且包含很多警告。

我想用lambda重写它,或者至少要泛化它。

我该如何进行RedisOperations>代替?

0 个答案:

没有答案