redis事务、锁、分布锁都是对redis数据的一种并发保护措施,只是作用域和应用场景不同。
一、redis事务
redis事务指的是提供一种将多个命令打包,以自行按顺序地执行,如果有一个环节出错,所有操作都会回滚。如果有用户在操作这个事务当中的数据,其他用户都不能访问。
1.1 事务三个阶段
- 开启事务
- 命令入列
- 执行事务/放弃事务
1.2 事务四大指令
- multi:开启一个事务
- exec:执行一个事务
- discard:取消一个事务
- watch:为事务提供一个锁,用来监听一个或多个变量,如果这监听项在执行事务(也就是不能同时修改某个监听项)之前被监听到改变了,那么整个事务就会回滚。
watch必须写在事务的前面,不能写在事务当中
1.3 维护库存数据的并发事务处理举例
监听 -> 开启事务 -> 读写数据 -> 执行事务
- 查看redis服务器种是否缓存对应商品的库存数据,如果没有,从数据库中查询并缓存
int stock = 0;
Object value = redisTemplate.opsForValue().get(id);
if(value == null){
ProductDO productDO = productDAO.selectById(id);
stock = productDO.getStock();
redisTemplate