ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

为什么redis单线程模型会效率高

2022-05-13 09:31:48  阅读:50  来源: 互联网

标签:删除 效率高 单线程 写入 redis 过期 内存 key


  一:redis中数据为什么会丢失?

    redis是缓冲用的并不是数据库,缓存的数据会过期的,另外也可能是被设置了过期时间,redis自己给干掉了

  

  二:数据都过期了为什么还占这内存呢?

    如:在redis中设置了过期时间,到期之后我们查数据会出现查不到数据但是还占内存的情况。

    其实它内部是  定期删除和惰性删除两个在起作用。

    定期删除指:redis每隔100ms随机抽取一些key来检查和删除。如果全部检查cpu消耗会很多,可能会宕机。

    惰性删除:定期删除中过期的key没有被删除的,当某个key被使用的时候redis会检查一下是否过期,如果过期了则不会返回任何东西。

 

   三:如果定期删除没删除的惰性删除也没检查到的过期数据怎么办呢?

    走内存淘汰机制

 

  四:redis内存淘汰机制

    如果redis的内存占用过多的时候,此时会进行内存淘汰,有如下一些策略:

      redis 10个key,现在已经满了,redis需要删除掉5个key

      1个key,最近1分钟被查询了100次

      1个key,最近10分钟被查询了50次

      1个key,最近1个小时倍查询了1次

    

    1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了

    2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)

    3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的key给干掉啊

    4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)

    5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key

    6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除

               其实,你写的数据太多,内存满了,或者触发了什么条件,redis lru,自动给你清理掉了一些最近很少使用的数据

    

 

 

     

  

标签:删除,效率高,单线程,写入,redis,过期,内存,key
来源: https://www.cnblogs.com/MingYi818/p/16265412.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有