redis中如何保证原子性

redis中如何保证原子性,第1张

redis中如何保证原子性

原子性:

原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有 *** 作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

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

Redis *** 作原子性的原因:

Redis的 *** 作之所以是原子性的,是因为Redis是单线程的。

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相关知识,请访问Redis使用教程栏目!

以上就是redis中如何保证原子性的详细内容,

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/705645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-23
下一篇 2022-04-23

发表评论

登录后才能评论

评论列表(0条)

保存