redis原子性(redis原子性自增)
本篇文章给大家谈谈redis原子性,以及redis原子性自增对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
什么是程序的原子性
程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环贺散节。
原子性操作:原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。
扩展资料:
redis的原子性禅好氏:
Redis所有单个命令的执行都是原子性的,这与它的单线程机制有关;
Redis命令的原子性使得我们不用考虑并发问题,可以方便的利用原子性自增操作 实现简单计数器功能;
redis 实现事务的原理:
批量操作在发送 EXEC 命令前被放入队列缓存
收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令都不会被执行
在事袜数务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中
参考资料:百度百科——acid
[img]Redis如何保证原子性
众所周知,Redis是一个key-value存储系统,它有一些特性,例如基于内存、清岩单线程、非阻塞、操作原子性、高性能等。
不做过多展开,本篇主要记录我对Redis如何保证原子性问题的思考,以及此问题配猛衍生出的问题,如有错误和疑问欢迎大家在底部留言。
答案很简单,因为redis是单线程。
问题来了,既然Redis是单线程,可以保证原子性,那么它的异步和非阻塞是什么?单线程如何实现异步和非阻塞?
再查阅了很多资料之后,我发现我对于 同步/异步 、 阻塞/非阻塞 以及 单线程/多线程 的概念有些不清晰,下面给出简单解释。
同步/异步 :首先同步和异步主要是从消息通知机制来讲起的。
同步:一个任务的完成必须依赖另一个任务,两个要么都成功要么都失败,是一种可靠的任务序列。当一个同步调用发生后,调用者必须等待返回结果,才能继续后面任务的执行。
异步:不需要等待被依赖任务的完成,只需要完成自己的任务就可以,所以是不可靠任务序列。当一个异步调用发生后,调用者不必等待返回结果,调用者可以去做其他的事情,被调用部件在处理完成后,通过(状态、通知、回调)来通知调用者。
阻塞/非阻塞 :阻塞和非阻塞和调用者等待消息通知时的状态有关。很重要,不要和同步混淆。
阻塞:调用者在等待通知的过程中,不能执行其他业务,傻傻的等待通知到来。
非阻塞:和阻塞相反,调用者可以去执行其他业务。
我没有阅读源码,参考下面文章 Redis 网络架构及单线程模型
总结一下 :对于Redis的网络请求,Redis会有一个EventLoop,里答卖御面有两个数组events,fired。events存放被注册的事件,fired用于存放EventLoop从 多路复用器 (epoll)中读取到的,将要执行的事件。
异步和非阻塞就反映在这里,注册到 多路复用器 (epoll)后去做其他事,之后通过主动轮询多路复用器,来逐个取出将要执行的事件,放入fired,逐个执行,这个过程是单线程的,因此不会出现并发问题。
问题三:什么是多路复用?select 、poll、epoll的区别(待解决)
主要问题已经解决,这个问题等我整理好再发出来。
用通俗点的语句告诉我Redis的操作的原子性是什么意思
原子性,就是执行这宽斗个配乱指令时,不容许打断。以前化学认为原子不可再分,用”原子性“表示不能分,不培巧档能打断。
redis的incr等命令是原子性的么?
是。野竖
秒杀系统单独靠incr等命令的原子性并不能保证系统安全,比颂虚大如修改库存肯定得先判断库存大于0再去decr,而get库存誉搏-判断是否大于0-decr库存这三个操作连在一起就不是原子性的,所以需要事务和锁。
关于redis原子性和redis原子性自增的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。