Skip to content

Redis 知识积累 #48

@JChehe

Description

@JChehe

读书笔记

书本以外的知识点(不断积累):

  1. Redis 的单线程特性是指执行命令的线程,从任意个客户端接收到的命令都会被一个接一个执行。而事务(MULTI 和 EXEC)则会在 Redis 接收到 EXEC 命令时,将存储在事务队列的命令依次执行,执行期间不会被其他客户端的命令插入打断,即 Redis 事务是原子性的。

  2. MULTI 和 EXEC 组成的事务在执行时不会被其他客户端打断,决解了“竞争条件”的问题。而 WATCH 命令则保证了:在任意个客户端连接的情况下,WATCH 到 EXEC 的整个代码逻辑(事务只是其中一部分)在执行期间数据的正确性(被 watch 的键未被改动)。

  3. Redis 的原子性操作:

    a. 把多个操作在 Redis 中实现成一个操作,即单命令操作;
    b. 事务(Redis 更推荐 Lua,并在开发者都使用 Lua 脚本替代事务时,删除事务)。
    c. 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本。

参考资料:

  1. Redis 官网的《Transactions》
  2. 极客时间的《29 | 无锁的原子操作:Redis如何应对并发访问?》
  3. Stack Overflow 的《Redis WATCH MULTI EXEC by one client》

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions