为了保证并发访问的正确性,Redis 提供了两种方法
- 加锁
- 原子操作
并发访问中需要对什么进行控制?
Redis 的两种原子操作方法
- 把多个操作在 Redis 中实现成一个操作,也就是单命令操作
- 原子操作本身不会对太多的资源限制访问,可以维持较高的系统并发性能
- 单命令原子操作的适用范围较小
- 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本
- Lua 脚本可以包含多个操作,这些操作都会以原子性的方式执行,绕开了单命令操作的限制
- 如果把很多操作都放在 Lua 脚本中原子执行,会导致 Redis 执行脚本的时间增加,同样也会降低 Redis 的并发性能
- 在编写 Lua 脚本时,要避免把不需要做并发控制的操作写入脚本中
Redis 本身的单命令操作
原子操作 INCR/DECR 命令可以对数据进行增值 / 减值操作
Lua 脚本
使用 Redis 的 EVAL 命令来执行脚本