正文
redis面试题原子性,redis increment 原子性
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
redis┃面试官问我redis事务和mysql事务的区别,我
1、在数据库方面,mysql是关系型数据库主要用于存放持久化数据,redis是NOSQL,即非关系型数据库,也是缓存数据库,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
2、类型不同 MySQL是关系型数据库;而Redis是非关系型数据库。作用不同 mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
3、从类型上来说,mysql是关系型数据库,redis是缓存数据库。mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
redis不支持原子操作
如果get得到的值都为正确的数据,基本能判断set和get命令为原子操作。
如果开启事务,操作不会被立即执行,将会返回null值,而a的类型是boolean,所以将会抛出异常:Redis事务不支持Rollback(重点)事实上Redis命令在事务执行时可能会失败,但仍会继续执行剩余命令而不是Rollback(事务回滚)。
Redis在8以后支持Lua脚本的原子性操作,可以用来做分布式锁,解决超限的问题。
redis事物通过multi命令开始。这条命令总是返回ok。然后用户可以执行多条指令,redis不会马上执行这些指令,还只是放入到队列中。当执行exec指令时,所有的指令执行。
redis的set指令具有原子性吗
1、试想开1000个写线程,1000个读线程同时操作Redis中的一个值,假如set和get不是原子的,那么当set的时候,把原来数据涂掉,还没来得及写进去,get操作已经执行,这个时候get到的值就可能为脏数据。
2、check-and-set(乐观锁),实现get,set命令序列数据的原子性:watch指令在redis事物中提供了cas的行为。为了检测被watch的keys在是否有多个clients改变时引起冲突,这些keys将会被监控。
3、在程序中执行多个Redis命令并非是原子性的,这也和普通数据库的表现是一样的。如果想在上面的程序中实现原子性,可以将get和set改成单命令操作,比如incr,或者使用Redis的事务,或者使用Redis+Lua的方式实现。
关于redis面试题原子性和redis increment 原子性的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。