Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redis 知识积累 #48

Open
JChehe opened this issue Oct 30, 2020 · 0 comments
Open

Redis 知识积累 #48

JChehe opened this issue Oct 30, 2020 · 0 comments

Comments

@JChehe
Copy link
Owner

JChehe commented Oct 30, 2020

读书笔记

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

  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》
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant