PHP

绘面试之关于Redis高并发

首先,理论上来讲,Redis是不可能高并发的,因为他是单进程的,再多的命令都是一个接一个地执行的。

但我们使用的时候,可能会出现并发问题,比如获得和设定这一对。

为什么呢?

Redis的的出身决定了Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。

由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访问时会出现问题。

发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。

同时,单线程的天性决定,高并发对同一个键的操作会排队处理,如果并发量很大,可能造成后来的请求超时。

在远程访问redis的时候,因为网络等原因造成高并发访问延迟返回的问题。

解决办法

在客户端将连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。

服务器角度,利用setnx变向实现锁机制。

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

支付宝扫一扫,向我赞赏

回复

This is just a placeholder img.