知识点整理

2019-11-14  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读