欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
1. 单机数据一致性
 
单机数据一致性架构如下图所示:多个可客户访问同一个服务器,连接同一个数据库。
 
场景描述:客户端模拟购买商品过程,在Redis中设定库存总数剩100个,多个客户端同时并发购买。
 
@RestController
 
public class IndexController1 {
 
    @Autowired
 
    StringRedisTemplate template;
 
    @RequestMapping("/buy1")
 
    public String index(){
 
        // Redis中存有goods:001号商品,数量为100
 
        String result = template.opsForValue()。get("goods:001");
 
        // 获取到剩余商品数
 
        int total = result == null ? 0 : Integer.parseInt(result);
 
        if( total > 0 ){
 
            // 剩余商品数大于0 ,则进行扣减
 
            int realTotal = total -1;
 
            // 将商品数回写数据库
 
            template.opsForValue()。set("goods:001",String.valueOf(realTotal));
 
            System.out.println("购买商品成功,库存还剩:"+realTotal +"件, 服务端口为8001");
 
            return "购买商品成功,库存还剩:"+realTotal +"件, 服务端口为8001";
 
        }else{
 
            System.out.println("购买商品失败,服务端口为8001");
 
        }
 
        return "购买商品失败,服务端口为8001";
 
    }
 
}
 
使用Jmeter模拟高并发场景,测试结果如下:
 
测试结果出现多个用户购买同一商品,发生了数据不一致问题!
 
解决办法:单体应用的情况下,对并发的操作进行加锁操作,保证对数据的操作具有原子性

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64760.shtml