redis入门之路

为什么要用缓存?
    常见的sql数据库(如mysql,oracle等)的数据是存在磁盘中的,虽然数据库本身会有缓存技术来减少数据库IO的压力,但是由于数据库的缓存一般是针对于查询内容,并且粒度较小,一般只有表中数据没变化时,数据库中的缓存才会发产生作用。这并不能减轻数据库增删改的IO压力,因此缓存技术应运而生,该技术实现了对热点数据的高速缓存,缓解数据库压力。
 
数据库本身缓存技术?(mysql/oracle)
    
 
主流应用架构:
    
什么样的数据适合缓存?
 
 
什么是缓存击穿?
    使用不存在的key频繁大量的进行高并发查询,导致缓存无法命中,每次请求都要击穿到后端数据库查询,最终可能导致数据库服务崩溃。
    可以将空值缓存,并且设置较短的过期时间以应对恶意攻击,设置较短的时间能避免缓存空间的浪费。
    避免恶意攻击方猜到我们使用这种策略,进而选择使用不同的key来攻击,可以进行数据拦截校验,如果key不符合我们的规则,直接返回,能拦截一部分的恶意请求。
 
什么是缓存并发?
    当缓存失效时,高并发场景下,可能有大量请求同时访问同一个key,并且要写入数据到缓存,会增加应用和数据库的压力,违背了缓存的设计初衷,可能导致应用崩溃或者数据库崩溃。
    1.加锁(分布式锁/本地锁):
        使用分布式锁(本地锁),保证同一个key只有一个线程去访问数据库,其他线程等待数据写入缓存后,从缓存读取数据即可。
                                图示双重检查锁
 
    2.不设置缓存过期时间,由后端定时任务控制刷新缓存数据,这样就不需要担心缓存过期,但要考虑数据量大的话,分批刷新缓存数据
 
什么是缓存雪崩?
    缓存雪崩,是指在同一时刻,缓存集体失效,会导致数据库在这个时刻承受巨大压力。
    
什么时候使用redis?什么时候使用memcache?
    主要有以下方面:(详见链接)
        内存结构
        持久化
        高可用
        内存分配
        https://www.cnblogs.com/wangzepu/p/9777662.html
 
为什么redis这么快?
    redis效率很高,官方给出的数据是100000+QPS(每秒查询率)
    1.redis完全基于内存
    2.redis是使用单进程单线程的(k,v)数据库,数据存储在内存中,不受磁盘I/O制约
    3.数据结构简单,操作也简单,redis是no-sql数据库,不使用表,才用key-value键值对存储,存取效率高
    4.redis使用多路I/O复用模型,为非阻塞I/O,redis使用的I/O多路复用函数是:
epoll/kqueue/evport/select
    选用策略:
    因地制宜,优先选择时间复杂度为 O(1) 的 I/O 多路复用函数作为底层实现。
    由于 Select 要遍历每一个 IO,所以其时间复杂度为 O(n),通常被作为保底方案。     基于 React 设计模式监听 I/O 事件。
 
redis数据类型?
    1.String类型:最大512M,二进制安全(可包含任何二进制数据,包括jpg等)
    重复写入,会覆盖之前数据

你可能感兴趣的:(redis入门之路)