/** * watch 监控多个key 一防止其他地方调用释放锁的时候对这个key进行修改 那么事务里面的代码就不会被执行 ! */ public boolean releaseLock(String key , String value){ try { Jedis jedis = RedisManager.getJedis(); while (true){ jedis.watch(key); if(value.equals(jedis.get(key))){ Transaction transaction = jedis.multi(); transaction.del(key); List<Object> list = transaction.exec(); if(list ==null){ continue; } jedis.unwatch(); } } } catch (Exception e) { e.printStackTrace(); } return false; } }
@Override public List<Object> exec() { try { if (isPipelined()) { pipeline(newJedisResult(getRequiredPipeline().exec(), new TransactionResultConverter<>(new LinkedList<>(txResults), JedisConverters.exceptionConverter()))); return null; } if (transaction == null) { throw new InvalidDataAccessApiUsageException("No ongoing transaction. Did you forget to call multi?"); } List<Object> results = transaction.exec(); return !CollectionUtils.isEmpty(results) ? new TransactionResultConverter<>(txResults, JedisConverters.exceptionConverter()).convert(results) : results; } catch (Exception ex) { throw convertJedisAccessException(ex); } finally { txResults.clear(); transaction = null; } }
@Override public void onCommit() { for (Transaction resource : resources) { resource.exec(); } isTransactionInProgress = false; }
synchronized void onExecute(Transaction tx) { tx.exec(); resources.remove(tx); } }
@Override public void commitTransaction() { transaction.exec(); transaction = null; }
@Override public void commitTransaction() { transaction.exec(); transaction = null; }
@Override public Object execute(Jedis jedis) { Transaction transaction = jedis.multi(); for (int i = 0; i < keyList.size(); i++) { transaction.set(keyList.get(i), valueList.get(i)); } transaction.exec(); return true; } });
@Override public Object execute(Jedis jedis) { Transaction transaction = jedis.multi(); for (int i = 0; i < keyList.size(); i++) { transaction.append(keyList.get(i), valueList.get(i)); transaction.expire(keyList.get(i), seconds); } transaction.exec(); return true; } });
public static List<Object> tx(JedisAtom jedisAtom) { Jedis jedis = pool.getResource(); Transaction trans = jedis.multi(); jedisAtom.action(trans); return trans.exec(); }
/** * Executes in a transaction. */ public final <T> Result<T> execTrans(Function<Jedis, T> func) { return exec((redis) -> { Transaction t = redis.multi(); T r = func.apply(redis); t.exec(); return r; }); }
@Override public void multiSet(Map<? extends K, ? extends V> map) { Transaction transaction = this.mockJedis.multi(); for(Entry<? extends K, ? extends V> entry : map.entrySet()) { K key = entry.getKey(); V value = entry.getValue(); byte[] keyBytes = this.template.keySerializer.serialize(key); byte[] valueBytes = this.template.valueSerializer.serialize(value); transaction.set(keyBytes, valueBytes); } transaction.exec(); }
@Override public void clean(String sessionsKey) { try(Jedis jedis = this.jedisPool.getResource()) { Set<String> sessions = jedis.smembers(sessionsKey); String[] sessionsArray = sessions.toArray(new String[sessions.size()]); Transaction t = jedis.multi(); t.srem(sessionsKey, sessionsArray); t.del(sessionsArray); t.exec(); } }
@Override public void del(String sessionsKey, String key) { try(Jedis jedis = this.jedisPool.getResource()) { Transaction t = jedis.multi(); t.srem(sessionsKey, key); t.del(key); t.exec(); } }
@Override public Object execute(Jedis jedis) { Transaction transaction = jedis.multi(); transaction.append(key, value); transaction.expire(key, seconds); transaction.exec(); return true; } });
@Override Object execute() { Transaction transaction = jedis.getShard(key).multi(); transaction.del(key); for (String value : values) { transaction.rpush(key, value); } transaction.exec(); return null; } }.getResult();
@Override public <T> RedisFacade.ResponseFacade<T> transaction(final byte[] key, final TransactionRunner<T> transaction) { final Transaction t = jedis().multi(); RedisFacade.ResponseFacade<T> response = transaction.run(wrapJedisTransaction(t)); t.exec(); return response; }
@Test public void set() throws UnsupportedEncodingException { byte[] session = "session".getBytes(); this.jedisNodeClient.set("key", SESSIONS_KEY, session, timeout); verify(this.transaction, times(1)).setex("key".getBytes(Protocol.CHARSET), timeout, session); verify(this.transaction, times(1)).sadd(SESSIONS_KEY,"key"); verify(this.transaction, times(1)).exec(); verify(this.jedis, times(1)).close(); }
@Override public void evict(Object key) { redisContext.run(jedis -> { byte[] keyBytes = toKeyBytes(key); Transaction multi = jedis.multi(); multi.del(keyBytes); multi.zrem(keysetBytes, keyBytes); multi.exec(); }); }
@Override public void unregister(final Node node) { try (final Jedis jedis = redisConnector.getResource()) { try (final Transaction tx = jedis.multi()) { tx.del(VERTIGO_NODE + node.getId()); tx.srem(VERTIGO_NODES, node.getId()); tx.exec(); } catch (final IOException e) { throw WrappedException.wrap(e); } } }