缓存三大问题
1、缓存穿透:
问题:作用于为空的键上面,导致一直查询数据库
解决:设置为一个为空,或者0的数据,避免一直查询数据库,然后设置过期时间,避免一直查询不到
2、缓存雪崩:
问题:同一时刻导致大量的key失效,很多的用户访问的时候,大量作用于数据库,导致数据库崩溃
解决:对于不同的key设置不同的过期时间
3、缓存击穿:
问题:某个键在一刻失效,而又发生了大量的并发请求,导致全部到数据库,导致崩溃
解决:对于失效的key,在查询数据库前,进行加锁
redis加强redisson
redisson 介绍
介绍:内部集成了大量的加锁方式,
redisson锁的种类
普通锁
对于一个代码块,或者方法进行加锁,防止高并发访问同一个查询数据库,线程竞争锁是随机的
公平锁
对于一个代码块,或者方法进行加锁,防止高并发访问同一个查询数据库,线程竞争锁是顺序的,先到的线程先得锁
读写锁
允许多个线程进行读,但是写的时候只能一个线程写,其他线程不能读也不能写,在读的时候 也不能写
用于:更新数据库值时,写缓存时,进行写锁更新
型号量
一次性设置好型号量初始值(5),在请求到型号量锁的时候进行得到锁,次数-1,在释放型号量时次数+1,型号量次数为0的时候,不能得到锁,就不能向下执行。
可用于:限流,设置好流量,访问一个 -1
闭锁
模拟 CountDownLatch ,设置好初始化值,然后加锁等待,其他并发每一次访问进行-1,到减到0的时候,先等待的线程才能继续进行