page contents

Redis 如何防止高并发?

轩辕小不懂 发布于 2021-07-28 14:15
阅读 814
收藏 0
分类:PHP开发
  • PHP
  • 1466
    Nen
    Nen
    - 程序员

    其实 redis 是不会存在并发问题的,因为他是单进程的,再多的 command 都是 one by one 执行的。我们使用的时候,可能会出现并发问题,比如 get 和 set 这一对。

    redis 为什么会有高并发问题

    redis 的出身决定

       Redis 是一种单线程机制的 nosql 数据库,基于 key-value,数据可持久化落盘。由于单线程所以 redis 本身并没有锁的概念,多个客户端连接并不存在竞争关系,但是利用 jedis 等客户端对 redis 进行并发访问时会出现问题。发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。

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

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

    解决办法

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

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

    请先 登录 后评论