redis是什么

redis是内存非关系型数据库,特点是速度快,速度是传统数据库的10-30倍。由于使用了内存,所以相较于传统的数据库而言不能存太多内容,一般只用来做热点数据的缓存。除此之外,redis还被用来做分布式锁,数据统计计数,消息队列等

redis数据类型

  1. string
  2. list
  3. set
  4. z-set
  5. map
  6. 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缓存淘汰策略:

  • 两个维度的组合
    • 全部数据还是设置了过期时间的数据
    • 随机淘汰,最近使用的还是最少使用的还是最近最少使用的
  1. 设置了过期数据,最近最少使用的
  2. 设置了过期数据,最少使用的
  3. 设置了过期数据,随机淘汰
  4. 设置了过期数据,最近未使用的
  5. 所有数据,随机淘汰
  6. 所有数据,最少使用的
  7. 所有数据,最近最少使用的(常用)
  8. 禁止删除

    redis支持事务么

    事务四大特性:原子性,一致性,隔离性,持久性。
    redis虽然也有操作事务的命令,但是这个命令其实是将一组redis命令打包执行,如果中间执行出错并不会回滚。因此redis不支持事务。