比如有一个点赞功能,服务是集群部署的(8080,8090)两个服务,然后通过nginx做负载均衡。
在并发下,请求可能会被路由到两个服务中去,然后执行redis的hincrby自增操作,按道理来说1000个人点赞就会有1000个赞,但是实际上却不是,点赞数远远少于实际的数量。
这是由于并发造成的。
疑惑:多个客户端连接redis服务,并发送多条自增命令,按道理来说应该是串行执行才对呀,不存在并发。为什么会出现自增的数量不对呢?
比如有一个点赞功能,服务是集群部署的(8080,8090)两个服务,然后通过nginx做负载均衡。
在并发下,请求可能会被路由到两个服务中去,然后执行redis的hincrby自增操作,按道理来说1000个人点赞就会有1000个赞,但是实际上却不是,点赞数远远少于实际的数量。
这是由于并发造成的。
疑惑:多个客户端连接redis服务,并发送多条自增命令,按道理来说应该是串行执行才对呀,不存在并发。为什么会出现自增的数量不对呢?
如果你是使用jedis操作redis的话。
有一个可能的原因是,jedis的client本身是非线程安全的。在一个服务器上,多线使用一个client操作redis会有并发问题。
可以使用jedispool,在每次操作时都get一个client,然后再去访问,这样就不会有并发问题。
4 回答1k 阅读✓ 已解决
4 回答1.1k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答688 阅读✓ 已解决
2 回答1.6k 阅读
2 回答1.6k 阅读
2 回答1.2k 阅读
自增命令不会有问题.
我倒是很想知道你说的两个服务是啥架构啊? reids-cluster吗? cluster 也不会有问题啊.