redis是什么
redis是内存非关系型数据库,特点是速度快,速度是传统数据库的10-30倍。由于使用了内存,所以相较于传统的数据库而言不能存太多内容,一般只用来做热点数据的缓存。除此之外,redis还被用来做分布式锁,数据统计计数,消息队列等
redis数据类型
- string
- list
- set
- z-set
- map
- bitmap
redis底层结构
redis是单线程的。不使用多线程的原因是redis的性能瓶颈不在cpu,而在io和网络。对于网络,redis使用了reactor模型,io多路复用来监听多个socket,
redis也有多线程模式。默认单线程。redis可能会遇到的问题
缓存穿透:指请求没有命中缓存,从而又走了数据库的情况。可以用布隆过滤器来判断请求的内容是否在缓存中,如果不在,直接返回报错。
缓存雪崩:是指缓存在同一时间大面积失效的情况。这时大量请求都会打到db上。设置随机的缓存失效时间
redis挂了,大量请求打到db。将redis做成集群redis日志
rdb和aof两种方式或这两种方式的组合。
rdb保存某一个时间点的全量的数据,而aof保存除了查询外的操作记录,并选择不同的策略将操作记录刷到磁盘上。有每次更新都刷盘,或每秒刷一次,或由操作系统决定。redis定时失效key的底层原理
保存一个过期的key和过期时间组成的一个map的过期字典。
当下次获取的时候将key过期,或者定时将过期的key清除掉,或者两者结合。redis缓存淘汰策略:
- 两个维度的组合
- 全部数据还是设置了过期时间的数据
- 随机淘汰,最近使用的还是最少使用的还是最近最少使用的