Redis 为单进程单线程模式,采用队列模式将并发访问变为串行访问。 Redis 本身没有锁的概念, Redis 对于多个客户端连接并不存在竞争,但是在 Jedis 客户端对 Redis 进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。
对此有 2 种解决方法:
1.客户端角度,为保证每个客户端间正常有序与 Redis 进行通信,对连接进行池化,同时对客户端读写 Redis 操作采用内部锁 synchronized 。
2.服务器角度,利用 setnx 实现锁。
注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用 synchronized 也可以使用 lock ;第二种需要用到 Redis 的 setnx 命令,但是需要注意一些问题。
收起