Redis学习笔记9


Redis知识点


九、常见面试题

9.1redis为什么快

  1. redis是单线程模型,对应redis的单线程事件处理器(file event handler)
  2. redis通过套接字socket和其他的客户端进行连接。通过对文件事件的监听,服务器能进行处理。
  3. 文件事件处理器:
    • 多个socket
    • IO多路复用程序
    • 文件事件分派器(将socket关联到对应的事件中)
    • 文件事件处理器
  4. 性能:在cpu跑满的情况下,1kw的数据,每秒能个执行5563个请求(LRANGE),4w5个请求(set)

9.2redis单线程为什么比多线程快?

  1. 完全基于内存,大部分请求都是内存操作,所以很快。类似HashMap,优势在于查找和操作的时间复杂度都是O(1)。
  2. 采用单线程,可以避免不必要的上下文切换和竞争条件,多线程之间需要切换,消耗cpu。
  3. 单线程不用考虑锁的问题。不会因为死锁而产生多余的性能消耗。
  4. 采用多路I/O复用(epoll)模型,并非阻塞IO

9.3redis常用数据类型

  1. String
  2. List
  3. Set
  4. Hash
  5. ZSet
  6. hyperloglog
  7. bitmap
  8. geospatital
  9. stream

9.4Redis的持久化机制了解吗?

两种机制:RDB和AOF,默认RDB

RDB:

快照持久化,redis通过fork一个子进程进行持久化,在子进程中创建一个临时文件写入数据,当数据写完,用临时文件替换上次持久化的文件。整个过程中,主进程不需要进行IO操作

AOF:

  1. 当每执行一条写操作,会将操作append在AOF缓冲区中
  2. 根据持久化策略,将缓冲区的内容(appendfsync)刷到磁盘文件中。
  3. 当AOF文件大小超过重写策略的大小时,会通过rewrite压缩AOF文件。
  4. 当redis重启后,会根据AOF文件,重新加载写操作,恢复数据。

二者对比:

RDB:

  1. 适合大规模数据恢复,恢复速度快,节省磁盘空间。
  2. fork时采用写时复制技术,如果数据量太大,性能会有影响。
  3. 有数据丢失的风险。

AOF:

  1. 数据丢失的风险较小。
  2. 占用更多的磁盘空间,恢复速度慢。

9.5 redis过期键淘汰(删除)策略

5种策略

  1. volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
  2. volatile-ttl:挑选将要过期的数据进行淘汰
  3. volatile-random:任意选择数据淘汰
  4. allkeys-lru:当内存不足时,在key空间中,移除最近最少使用的key淘汰
  5. allkeys-random:从key空间中,任意选择数据淘汰。

2种删除

定期删除:

在设置某个key的过期时间的时候,创建一个定时器,让定时器倒计时结束时,对其进行删除。

优点:对内存友好,能够保证能存的key一旦过期就从内存中删除,释放空间。

缺点:对cpu不友好,在过期键较多时,删除过期键会占用一部分CPU事件,对服务器的性能和吞吐量有影响。

惰性删除:

设置某个Key的过期事件,当需要该key时,检查是否过期,如果过期,就删除,否则就返回该key的值。

优点:有利于cpu的运转,在使用该key时才进行过期检查,对于很多用不到的key不用进行检查。

缺点:不利于内存空间的释放。如果一个键已过期,但是一直没有使用,不检查到就不会释放内存。从而造成内存泄漏。

9.6Redis内存用完了会发生什么?

达到设置的内存上限,写命令会返回错误信息(读命令还会正常返回),如果设置了内存淘汰策略,则会淘汰旧内容。

9.7缓存穿透、缓存击穿、缓存雪崩

缓存穿透:

查询根本不存在的key A,使得请求穿过redis直达数据库(DB),DB负载过大时,就会宕机。

解决方案:

  1. 缓存空对象
  2. 设置布隆过滤器

缓存击穿:

一份热点数据,访问量极大,在缓存失效的瞬间,大量请求直达DB。

解决方案:

  1. 设置热点数据永不过期
  2. 加互斥锁,当一个线程访问数据时,其他线程等待。

缓存雪崩:

key对应的数据存在,但是在redis中的某一时刻,

但是在redis中的某一时刻,key大批量失效,如果这个时刻有大量的并发请求过来,就会发现缓存过期,就会访问DB,并更新到缓存中,大量请求会使DB崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值