美文网首页
知识点整理

知识点整理

作者: 苏丨泊丨漫 | 来源:发表于2019-11-14 16:33 被阅读0次

    redis

    redis为什么高效,及应用场景

    1、完全基于内存,大多数请求都是内存操作,非常快速; 
    2、数据结构简单,操作简单; 
    3、采用单线程,避免了不必要的上下文切换和竞争条件,不存在多进程或者多线程的切换,不用考虑锁带来的性能消耗;
     4、使用多路 I/O复用模型,非阻塞 IO
    
    使用场景:1. 缓存:如字典数据缓存; 2. 分布式问题解决方案:session共享、分布式锁
    

    死锁产生条件,及避免死锁

    死锁产生条件.jpeg
    1. 尽量使用tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。
    2. 尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。
    3. 如果有多把锁,线程顺序获取锁。
    

    悲观锁与乐观锁

    悲观锁:每次改变数据时,都担心数据被修改。先锁数据,再对数据修改。
    乐观锁:每次更改数据时,不担心数据被修改或预想该数据被改动概率小。先尝试修改,如数据被改变则放弃修改。乐观锁有可能导致数据修改失败,需要考虑补救措施,如自旋。在高并发情况下,该数据改动后会导致其他线程对数据操作失败,造成不必要的资源浪费,故该场景下考虑使用悲观锁。
    

    数据库

    事务

    事务特性

     原子性、一致性、隔离性、持久性
    

    事务隔离级别

    1. 未提交读: 事务的修改,即使没有提交,对其他事务也是可见的。事务可以读取其他事务未提交的数据,称为脏读
    2. 提交读:一个事务从开始到提交之前,所做的修改对其他事物都不可见。这个级别会造成不可重复读。Oracle数据可默认级别。
    3. 可重复度:同一个事务中多次读取同样记录的结果是一直的。这个级别无法解决幻读。所谓幻读,指的是当某个事务在读取某个范围内的记录时,灵位一个事务又在该范围内插入新的记录,当之前的事务再次读取该范围的记录,就会产生幻行。
    4. 可串行化:事务完全串行化执行。

    Spring事务传播行为

    Spring事务传播行为.png

    相关文章

      网友评论

          本文标题:知识点整理

          本文链接:https://www.haomeiwen.com/subject/cbsrictx.html