学习 Redis Transaction(事务)
import java.util.List;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
public class TestRedisTransaction {
private static JedisConnectionFactory getJedisConnectionFactory() {
JedisConnectionFactory jcf = new JedisConnectionFactory();
jcf.setHostName("127.0.0.1");
jcf.setPort(6379);
jcf.setPassword("123");
jcf.afterPropertiesSet();
return jcf;
}
private static RedisConnection getRedisConnection() {
return getJedisConnectionFactory().getConnection();
}
public static void main(String[] args) {
RedisConnection rc = getRedisConnection();
//MULTI 标记一个事务块的开始。
//事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
rc.multi();
rc.incr("user_id".getBytes());
rc.echo("hello".getBytes());
rc.incr("user_id".getBytes());
rc.ping();
//EXEC 执行所有事务块内的命令。
List<Object> comm = rc.exec();
for (Object obj : comm) {
if (obj instanceof byte[]) {
System.out.println(new String((byte[])obj));
continue;
}
System.out.println(obj);
}
rc.multi();
rc.ping();
rc.echo("hehe".getBytes());
//DISCARD 取消事务,放弃执行事务块内的所有命令。
rc.discard();
//WATCH 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
rc.watch("salary".getBytes());
//UNWATCH 取消 WATCH 命令对所有 key 的监视。
rc.unwatch();
}
}