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崩溃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值