分布式事务使用说明
RedisTransactional注解说明
RedisTransactional使用悲观锁实现,此注解只能实用在方法上,在方法执行前会被上锁,执行完成会解锁。
示例:
@RedisTransactional
public String add(){
Integer value = cache.get(key);
value++;
cache.put(key,value);
return "ok";
}
参数说明
参数名 | 说明 | 必须 |
---|---|---|
lockName | 锁名字,如果不填则使包名加方法名作为锁名 | 否 |
lockTimeout | 锁的超时时间,单位为秒 ,默认为30s | 否 |
acquireTimeout | 获取锁的最长等待时间,单位为秒,如果不填,则一直会等待 | 否 |
使用详解
1、如果多个方法对同一个分布式对像可能有并发事务操作时,则应该使用同一个锁名:
@RedisTransactional(lockName = "test_lock" )
public String add(){
Integer value = cache.get(key);
value++;
cache.put(key,value);
return "ok";
}
@RedisTransactional(lockName = "test_lock" )
public String cut(){
Integer value = cache.get(key);
value--;
cache.put(key,value);
return "ok";
}
2.如果只有一个方法操作了分布式对象,则可以使用默认的锁名:
@RedisTransactional
public String add(){
Integer value = cache.get(key);
value++;
cache.put(key,value);
return "ok";
}
3、 一个带有所有参数的示例:
@RedisTransactional(lockName = "test_lock",acquireTimeout=10,lockTimeout = 10)
public String add(){
Integer value = cache.get(key);
value++;
cache.put(key,value);
return "ok";
}