Redis原子性原理
摘要:
1、Redis是单进程单线程的网络模型,用的是epoll网络模型,网络模型都是单线程异步非阻塞处理网络请求
2、Redis的单线程处理所有的客户端连接请求,命令读写请求。(有些任务比如rdb和aof等操作是fork子进程处理的,不会影响redis主线程处理客户端的命令)
3、Redis提供的所有API操作,相对于服务端方面都是one by one执行的,命令是一个接着一个执行的,不存在并行执行的情况。
4、Redis客户端就可能会出现高并发出现错误的读写数据,下面我们举个电商秒杀的例子来讲解一下。
Redis在并发中的表现
Redis的API是原子性的操作,那么多个命令在并发中也是原子性的吗?
看看下面这段代码:
<?php
$num = 10; //系统库存量
$user_id = \Session::get('user_id');//当前抢购用户id
$len = \Redis::llen('order:1'); //检查库存,order:1 定义为健名
if($len >= $num)
re