29 | 无锁的原子操作:Redis如何应对并发访问?

极客时间 | 《Redis核心技术与实战》学习笔记目录

原文

为了保证并发访问的正确性,Redis 提供了两种方法

  • 加锁
  • 原子操作

并发访问中需要对什么进行控制?

Redis 的两种原子操作方法

  • 把多个操作在 Redis 中实现成一个操作,也就是单命令操作
    • 原子操作本身不会对太多的资源限制访问,可以维持较高的系统并发性能
    • 单命令原子操作的适用范围较小
  • 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本
    • Lua 脚本可以包含多个操作,这些操作都会以原子性的方式执行,绕开了单命令操作的限制
    • 如果把很多操作都放在 Lua 脚本中原子执行,会导致 Redis 执行脚本的时间增加,同样也会降低 Redis 的并发性能
    • 在编写 Lua 脚本时,要避免把不需要做并发控制的操作写入脚本中

Redis 本身的单命令操作

原子操作 INCR/DECR 命令可以对数据进行增值 / 减值操作

Lua 脚本

使用 Redis 的 EVAL 命令来执行脚本

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus