redis复习

147 阅读2分钟

redis复习

redis五大类型

  1. string
  2. hash
  3. list(底层结构是链表)
  4. set(hashtable)
  5. zset

redis 是单线程还是多线程

无论什么线程,工作线程就是一个 6.0高版本出现了IO多线程

redis存在线程安全问题

redis可以保证内部串行,业务上要自行保障顺序~!

遇到过缓存

首先,什么是穿透

  1. 有以下三点 客户端 redis db 什么是缓存穿透 无效key,不存在

什么是击穿

  1. 热点key过期(没有被缓存的)
  2. 数据库突然有大量的访问,redis没有缓存 解决方式:注意点 这个锁必须由一个redis提供请求
  3. 请求redis,如果没有
  4. 获取分布式锁
  5. 获取到分布式锁的,去访问db,没有获取到的sleep或者返回兜底
  6. 访问db,写入该key到redis
  7. 释放锁,唤醒睡眠线程

缓存是如何回收的(删除过期key的)

  1. 后台在轮询,分段分批的删除过期key
  2. 请求的时候判断是否过期

缓存是如何淘汰的

  1. 内存空间不足的情况下
  2. 淘汰机制里面有不允许淘汰 3.lru/lfu/random/ttl 4.全空间 5.设置过期时间的key集合中

如何进行缓存预热

  1. 把数据塞入redis
  2. 开发逻辑上也要规避差集,会造成击穿,穿透,雪崩

缓存和数据库不一致如何解决

  1. 先写redis 有可能会丢数据
  2. 先写db,再写redis 数据有可能会有差别 通用的解决方式 canal binlog 完全的异步化

主从不一致的问题

  1. redis是弱一致性,异步的同步
  2. 锁不能用主从(单实例)redisson
  3. 配置同步因子 4.wait 2 违背redis的初衷了

redis持久化的原理

  1. rdb,aof 主从同步
  2. 高版本开启AOF AOF是可以通过执行日志得到全部内存数据,但是追求性能