redis:
缓存击穿:对于访问过期的key查询数据时,加锁,保证只有一个线程去底层获取数据,并返回结果缓存
缓存穿透:对于访问不存在的key时给出空结果并缓存,或引入布隆过滤器将数据提前缓存在布隆过滤器中
缓存雪崩:对于key采用随机过期时间,避免大量的key在同一时间失效导致数据库承载过高

持久化机制:

AOF:以追加 命令行记录的方式记录完整的日志  优点:能够完整恢复数据  缺点:恢复备份效率低

RDB:以二进制的方式定时本分数据  优点:恢复备份效率高 缺点:存在备份时间临界区有丢失数据的可能

AOF + RDB:定时备份数据以二进制的方式写入文件,增量以命令行的记录方式追加到文件当中

数据类型:

string : 字符串(操作命令:set get append setrange getrange strlen)

             数值(操作命令:incr)   理解待加深

             bitmap 

list:       理解待加深

hash:   理解待加深

set:      理解待加深

sorted_set   理解待加深

缓存的更新机制:

被动更新:有效期到后,再次写入; 客户端查询数据时,从数据库中获取,写入缓存。 在缓存有效期(t)内,所有查询走缓存,所有写入走数据库。

使用场景:对数据的准确性,实时性要求不高的场景,如博客的浏览访问量

主动更新:

     1:更新缓存,更新数据库    数据不一致的风险比较高,一般不采用

     2:更新数据库,更新缓存    并发请求会出现数据不一致;修改数据库再经过大量计算得出缓存值,浪费性能,如缓存还没使用,更加浪费

     3:删除缓存,更新数据库     一般不采用;

                (1):读的效率一般比写的效率要高,当还未执行更新数据库,缓存有可能会被再次写入,最终导致数据不一致。  

               (2):延迟双删,更新数据库后再休眠一段时间后再次删除缓存,导致系统吞吐量下降

               (3):借用中间件,消息队列,重发消息  ,系统外订阅:canal,binlog  二次删除key,与业务代码解耦

      4:更新数据库,删除缓存  经常采用的方式;  如果写的效率高于读的效率则可能出现数据不一致的问题,但读的效率一般要高于写的效率,极端情况可再增加延迟双删处理

12-09 13:52