这些代码有问题吗(Jedis jedis = jedisPool.getResource(); Integer count = Integer.valueOf(jedis.get("count")); count--; jedis.set("count",count.toString()); return "没锁 卖出一张票 剩余 " + count ;)
时间: 2024-01-05 20:03:27 浏览: 73
问题的代码
这段代码存在线程安全问题,因为在多线程环境下,多个线程可能同时从Redis中读取count的值,并且对count进行操作,导致数据错误。
在这种情况下,可以使用Redis的原子操作incr和decr来避免这个问题。修改后的代码如下:
```
Jedis jedis = jedisPool.getResource();
Long count = jedis.decr("count");
return "没锁 卖出一张票 剩余 " + count ;
```
这里使用了Redis的decr方法,该方法会原子地将key对应的值减1,并返回减1后的值。因此在多线程环境下,多个线程对count进行操作时也不会出现数据错误的问题。
阅读全文