Redis面试突击第一季.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Redis到底是单线程还是多线程

Redis

6.0版本之前的单线程指的是其网络I/O和键值对读写是由一个线程完成的。

Redis6.0引入的多线程指的是网络请求过程采用了多线程,而键值对读写命令仍然是单线程

处理的,所以Redis依然是并发安全的。

也就是只有网络请求模块和数据操作模块是单线程的,而其它的持久化、集群数据同步等,

其实是由额外的线程执行的。

Redis单线程为什么还能这么快

1、命令执行基于内存操作,一条命令在内存里操作的时间是几十纳秒。

2、命令执行是单线程操作,没有线程切换开销。

3、基于IO多路复用机制提升Redis的I/O利用率。

4、高效的数据存储结构:全局hash表以及多种高效数据结构,比如:跳表,压缩列表,链

表等等。

Redis底层数据是如何用跳表来存储的

跳表:将有序链表改造为支持近似“折半查找”算法,可以进行快速的插入、删除、查找操

作。

Redis

Key过期了为什么内存没释放

你在使用

Redis

时,肯定经常使用

SET

命令。

SET

除了可以设置

key-value

之外,还可以设置

key

的过期时间,就像下面这样:

1127.0.0.1:6379

SET

tuling

zhuge

EX

120

2OK

3127.0.0.1:6379

TTL

tuling

4(integer)

117

此时如果你想修改

key

的值,但只是单纯地使用

SET

命令,而没有加上过期时间的参数,

那这个

key

的过期时间将会被擦除。

1127.0.0.1:6379

SET

tuling

zhuge666

2OK

3127.0.0.1:6379

TTL

tuling

//

key永远不过期了!

4(integer)

‐1

导致这个问题的原因在于:SET

命令如果不设置过期时间,那么

Redis

会自动擦除这个

key

的过期时间。

如果你发现

Redis

的内存持续增长,而且很多

key

原来设置了过期时间,后来发现过期时

间丢失了,很有可能是因为这个原因导致的。

这时你的

Redis

中就会存在大量不过期的

key,消耗过多的内存资源。

所以,你在使用

SET

命令时,如果刚开始就设置了过期时间,那么之后修改这个

key,也

务必要加上过期时间的参数,避免过期时间丢失问题。

Redis对于过期key的处理一般有惰性删除和定时删除两种策略。

1、惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,判断key是否过期,

如果过期了直接删除掉这个key。

2、定时删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每

100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分

key已经过期但还没有被清理掉的情况,导致内存并没有被释放。

Redis

Key没设置过期时间为什么被Redis主动删除了

当Redis已用内存超过maxmemory限定时,触发主动清理策略。

主动清理策略在Redis

4.0之前一共实现了

6

种内存淘汰策略,在

4.0

之后,又增加了

2

策略,总共8种:

a)

针对设置了过期时间的key做处理:

1.

volatile-ttl:在筛选时,会针对设置了过期时间的键值对,根据过期时间的先后进

行删除,越早过期的越先被删除。

2.

volatile-random:就像它的名称一样,在设置了过期时间的键值对中,进行随机

删除。

3.

volatile-lru:会使用

LRU

算法筛选设置了过期时间的键值对删除。

4.

volatile-lfu:会使用

LFU

算法筛选设置了过期时间的键值对删除。

b)

针对所有的key做处理:

5.

allkeys-random:从所有键值对中随机选择并删除数据。

6.

allkeys-lru:使用

LRU

算法在所有数据中进行筛选删除。

7.

allkeys-lfu:使用

LFU

算法在所有数据中进行筛选删除。

c)

不处理:

8.

noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息

(error)

OOM

command

not

allowed

when

used

memory,此时Redis只响应读

操作。

Redis淘汰Key的算法LRU与LFU区别

LRU

算法(Least

Recen

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档