基本的Redis事务

什么是Redis的基本事务

Redis的基本事务需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。和关系数据库的rollback不同,在Redis里面,被MULTI命令和EXEC命令包围的所有命令会一个接一个地执行,直到所有命令都执行完毕为止。当一个事务执行完毕后,Redis才会处理其他客户端的命令。

使用Java多线程测试redis事务

代码如下:

package transaction;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

public class RedisTransaction implements Runnable{
    private Jedis conn;
    public RedisTransaction(Jedis conn) {
        // TODO Auto-generated constructor stub
        this.conn=conn;

    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        Pipeline pipeline=conn.pipelined();
        System.out.println(Thread.currentThread().getName()+"开始");
        pipeline.incr("trans:");//第一个流水线放入队列
        try {
            Thread.sleep(100);
            pipeline.incrBy("trans:",-1);//第二个流水线放入队列
            System.out.println(Thread.currentThread().getName()+"完成");
            pipeline.exec();//执行这两条命令。
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
        Thread thread=null;
        Jedis conn=new Jedis("localhost");
        System.out.println("执行前:"+conn.get("trans:"));
        for(int i=0;i<3;i++){
            new Thread(new RedisTransaction(new Jedis("localhost"))).start();
        }
        try {
            Thread.sleep(1000);
            System.out.println("全部完成");
            System.out.println("执行后:"+conn.get("trans:"));
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

执行结果:

执行前:1
Thread-2开始
Thread-0开始
Thread-1开始
Thread-2完成
Thread-0完成
Thread-1完成
全部完成
执行后:1

结论:

通过使用事务,各个线程都可以在不被其他线程打扰的情况下,执行各自队列里面的命令。

注意

redis要在接收到EXEC命令之后,才会执行那些位于MULTI和EXEC之间的入队命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值