package com.easyooo.framework.cache.transaction; import java.util.Collection; import redis.clients.jedis.ShardedJedisPipeline; import redis.clients.jedis.Transaction; import com.easyooo.framework.support.redis.PiplineCallbackAdapter; import com.easyooo.framework.support.redis.TransactionCallback; /** * 执行Redis命令,支持事务及管道模式两种方式 * * @author Killer */ public class DefaultRedisTransactionCallback extends PiplineCallbackAdapter implements TransactionCallback{ private Collection<Command> redisCommands; public DefaultRedisTransactionCallback(Collection<Command> redisCommands){ this.redisCommands = redisCommands; } @Override public void doCallback(Transaction tx) { for (Command cmd : redisCommands) { switch (cmd.getOp()) { case SET: tx.set(cmd.getCacheKey(), cmd.getCacheValue()); break; case MOD: tx.set(cmd.getCacheKey(), cmd.getCacheValue()); break; case DEL: tx.del(cmd.getCacheKey()); break; case ADD_MEMBERS: tx.sadd(cmd.getCacheGroupKey(), cmd.getGroupValues()); break; case DEL_MEMBERS: tx.srem(cmd.getCacheGroupKey(), cmd.getGroupValues()); break; case SETS: tx.mset(cmd.getKeyvalues()); default: break; } } } @Override public void doCallback(ShardedJedisPipeline p) { for (Command cmd : redisCommands) { switch (cmd.getOp()) { case SET: p.set(cmd.getCacheKey(), cmd.getCacheValue()); break; case MOD: p.set(cmd.getCacheKey(), cmd.getCacheValue()); break; case DEL: p.del(cmd.getCacheKey()); break; case ADD_MEMBERS: p.sadd(cmd.getCacheGroupKey(), cmd.getGroupValues()); break; case DEL_MEMBERS: p.srem(cmd.getCacheGroupKey(), cmd.getGroupValues()); break; case SETS: String[] keyvalues = cmd.getKeyvalues(); for (int i = 0; i < keyvalues.length; i+=2) { p.set(keyvalues[i], keyvalues[i+1]); } default: break; } } } }