python面试--redis 高并发处理方式

redis的高并发处理方式

其实redis是不会存在并发问题的,因为他是单进程的,再多的命令都是一个接一个地执行的。我们使用的时候,可能会出现并发问题,比如获得和设定这一对。Redis的为什么 有高并发问题?
Redis的的出身决定
Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以redis本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用jedis等客户端对redis进行并发访问时会出现问题。发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。

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

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


解决:

1.在客户端将连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
解决方式:将Redis连接池化
首先,Redis也归属于数据库范凑,即便它是NoSQL类型,依然为C/S结构模式。客户端每次请求都需要建立数据库连接,在多客户端请求模式下服务端与客户端连接频繁将导致系列阻塞、超时等等系列问题。学过关系型数据库的朋友也知道,关系型数据库解决方式是采用连接池方式解决多请求连接问题。
同样,Redis数据库也同理,建立友好的连接数量让客户端与服务端保持一定数额的连接量,当客户端需要连接时,
能直接从连接池中获取连接,然后直接访问Redis服务端。

2.服务器角度,利用setnx变向实现锁机制。
setnx 有两个参数。第一个参数表示键。第二个参数表值如果当前键不存在,那么会插入当前键,将第二个参数做值.返回 1。如果当前键存在,那么会返回0。

你可能感兴趣的:(python,redis,面试题)