Redis如何应对并发访问?
应对并发访问的实质就是让并行执行的操作变为串行执行,所以Redis应对并发访问的方式一般有两种:
- 加锁。缺点是需要用到分布式锁,而分布式锁实现复杂。虽然加锁保证了互斥性,但是也会导致系统并发性能降低。
- 原子操作。原子操作也能实现并发控制,但是原子操作对系统并发性能的影响较小。原子操作一般采用两种方法:
- 把多个操作在Redis中实现成一个操作,也就是单命令操作;Redis是使用单线程来串行处理客户端的请求操作命令的,所以,Redis执行某个命令操作时,其他命令是无法执行的,这相当于命令操作是互斥执行的。Redis提供了INCR/DECR命令,可以对数据进行增值/减值的原子操作。
- 把多个操作写到一个Lua脚本中,以原子性方式执行单个Lua脚本,Redis会把整个Lua脚本作为一个整体执行,在执行的过程中不会被其他命令打断,从而保证了Lua脚本中操作的原子性。