redis复习
redis五大类型
- string
- hash
- list(底层结构是链表)
- set(hashtable)
- zset
redis 是单线程还是多线程
无论什么线程,工作线程就是一个 6.0高版本出现了IO多线程
redis存在线程安全问题
redis可以保证内部串行,业务上要自行保障顺序~!
遇到过缓存
首先,什么是穿透
- 有以下三点 客户端 redis db 什么是缓存穿透 无效key,不存在
什么是击穿
- 热点key过期(没有被缓存的)
- 数据库突然有大量的访问,redis没有缓存 解决方式:注意点 这个锁必须由一个redis提供请求
- 请求redis,如果没有
- 获取分布式锁
- 获取到分布式锁的,去访问db,没有获取到的sleep或者返回兜底
- 访问db,写入该key到redis
- 释放锁,唤醒睡眠线程
缓存是如何回收的(删除过期key的)
- 后台在轮询,分段分批的删除过期key
- 请求的时候判断是否过期
缓存是如何淘汰的
- 内存空间不足的情况下
- 淘汰机制里面有不允许淘汰 3.lru/lfu/random/ttl 4.全空间 5.设置过期时间的key集合中
如何进行缓存预热
- 把数据塞入redis
- 开发逻辑上也要规避差集,会造成击穿,穿透,雪崩
缓存和数据库不一致如何解决
- 先写redis 有可能会丢数据
- 先写db,再写redis 数据有可能会有差别 通用的解决方式 canal binlog 完全的异步化
主从不一致的问题
- redis是弱一致性,异步的同步
- 锁不能用主从(单实例)redisson
- 配置同步因子 4.wait 2 违背redis的初衷了
redis持久化的原理
- rdb,aof 主从同步
- 高版本开启AOF AOF是可以通过执行日志得到全部内存数据,但是追求性能