【Big Data 每日一题 - 20181108】Redis 的操作为什么是的原子性的详解

redis 的incr/decr 的原子性是什么意思

原子性(atomicity):一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都做,要么都不做。

对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。

Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关

Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作

实现简单计数器功能;

简单解释就是你的服务即使是多机器多进程的,incr也能保证每次返回的结果不会出现相同的值

 

Redis在并发中的表现

Redis的API是原子性的操作,那么多个命令在并发中也是原子性的吗?

看看下面这段代码:

$redis= newRedis();

$redis->connect('127.0.0.1',6379);

for($i= 0;$iget('val');

$num++;

$redis->set('val',$num);

usleep(10000);

}

用两个终端执行上面的程序,发现val的结果是小于2000的值,那么可以知道,在程序中执行多个Redis命令并非是原子性的,这也和普通数据库的表现是一样的

如果想在上面的程序中实现原子性,可以将get和set改成单命令操作,比如incr,或者使用Redis的事务,或者使用Redis+Lua的方式实现

总结

综上所述,对Redis来说,执行get、set以及eval等API,都是一个一个的任务,这些任务都会由Redis的线程去负责执行,任务要么执行成功,要么执行失败,这就是Redis的命令是原子性的原因。

Redis本身提供的所有API都是原子操作,Redis中的事务其实是要保证批量操作的原子性。

 

实例代码:

Redis原子计数器incr,防止并发请求 

https://blog.csdn.net/Roy_70/article/details/78260826 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值