什么是Redis
Redis简单来说是一种基于K-V存储的非关系型数据库,主要用来存放一些热点数据,来缓解DB的压力。只要能在Redis中能查询到数据都不会直接去查询数据库。官方要求最小集群6太,一主一从*3组。Redis的性能大约是数据库的10-100倍。
- Redis的五大数据类型 String List set zset hash
- Redis采用单线程+IO多路复用的原理:简单来说就是一个线程处理多个请求,好比一个人去银行转账需要填单子,在该用户填单子的这段时间,银行串口可以处理另一个人的业务。银行窗口好比一个单线程,它只是和填单子的人建立了一个链接,并没有真正的使用这个线程。此线程还可以继续处理别的请求。当前一个链接真正使用到此线程时才会占用此线程,从而提高效率。
缓存穿透
缓存穿透就是说就是用户查询一个不存在的数据,Redis中查不到,就会查询数据库。这样的话就失去了缓存的意义。如果用户频繁的去查询这个不存在的数据,会导致数据库宕机。为了解决这个问题。我们将查询到的空值也进行保存在Redis中,并设置有效时间。这样的话用户无论怎么查询这个不存在的数据都会在Redis中命中,从而解决了缓存穿透的问题。
缓存雪崩
缓存雪崩指的是同一时间,大量Redis中的数据失效,导致用户那边过来的请求在Redis中无法命中,全部去查询数据库。导致数据库瞬间压力过大,会出现问题。如何解决呢?就是把所有Redis中的失效时间增加一个随机值,从而降低重复的失效率。
缓存击穿
缓存击穿的话就是在Redis中一个热点数据突然失效,再此期间该数据被高并发访问。Redis失去作用,请求全部落到数据库中,同样导致数据库瞬间压力过大。从而引发问题。我们可以使用Redisson加锁,当大量数据请求时,只放行一个请求,将查询到的结果立马保存在Redis中,让其余的请求全部再去Redis中去查询。从而解决缓存击穿的问题。