Redis并发问题

Posted andywu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis并发问题相关的知识,希望对你有一定的参考价值。

Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:
1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。比如java中的jedisPool。
Jedis是一个Java语言的Redis客户端,它为Java语言连接与操作Redis提供了简单易用的接口。
Jedis不是线程安全的,故不应该在多线程环境中共用一个Jedis实例。但是,也应该避免直接创建多个Jedis实例,因为这种做法会导致创建过多的socket连接,性能不高。
要保证线程安全且获得较好的性能,可以使用JedisPool。JedisPool是一个连接池,既可以保证线程安全,又可以保证了较高的效率。

2.服务器角度,利用setnx实现锁。
语法:
SETNX key value







以上是关于Redis并发问题的主要内容,如果未能解决你的问题,请参考以下文章

Redis并发(转)

高并发架构系列:Redis并发竞争key的解决方案详解

Redis并发问题

如何解决redis高并发客户端频繁time out

Redis并发问题(雪崩击穿穿透)

Redis并发问题(雪崩击穿穿透)