假设我每秒有 100 个请求,对于每个查询,需要提取一个哈希值,然后需要更新相同的哈希值,如下所示:
redis.hget 'value', 'user-123' redis.hset 'value', 'user-123', JSON.generate({:number_of_visits => 15})
如果每秒有大量的读\写会发生什么?
redis 是否会将 hget 和 hset 命令都排队,并且它们都将按进入的顺序执行?进入的命令越多,它会减慢 hgets 的速度吗?
Redis 使用单线程处理命令,因此命令会按照到达的顺序进行处理。
这里的一些文档,
从根本上讲,Redis 是一个单线程服务器。这意味着单个线程使用 epoll、kqueue 和 select 等基于事件的范例来读取传入的连接。当文件描述符上发生特定事件时,它会处理它们并写回响应。此 UML 序列图显示了 Redis 如何在内部处理客户端接收到的命令:
如果您以比 redis 处理它们的速度更快的速度发送命令,则命令将在 redis 中排队,并且客户端将看到延迟增加,因为它们等待命令出列和处理。这将影响 hset 和 hget 命令。