redis高并发(数据洪流)插入(SET)是如何工作的?如何应对?


众所周知redis只有一个线程,那么在多并发情况下:

  1. 有多个相同的set请求,redis内部的处理流程是怎样的?
  2. 我只知道命令会等待,这里的 等待 是所有命令都等待么?比如此时的其他set和 任何get 都会阻塞么?
  3. redis内部是将命令作为一个 队列 来处理么?或者是其他方式?
  4. 当第一个set处理完后,其他的相同的set会覆盖掉么,也就是说依然会占用cpu来工作么?希望能 具体说说

面对 同一时间高并发请求 的场景,将数据设置进redis时如何 避免大量请求redis 导致cpu过高?我想到了三种方案:

  1. 调用set的时候,通过 exist 再次判断(取的时候会先判断exist一下,如果不存在才去SET);
  2. 通过向缓存中设置一个 对象锁 ,set完毕后释放;
  3. 第三种方案是今天刚查到的,通过 setnx 命令来控制。

不知道哪一种最合适,个人感觉第三种因为是redis支持的。 希望高人指点一二,不胜感激

Redis web java 并发 php

会飞的草莓 10 years, 10 months ago
  1. 参考epoll(IO多路复用)
  2. 参见1
  3. 陆续执行。 具体请看源码

后一个问题请 高人 回答。

edWarts answered 10 years, 10 months ago

Your Answer