数据库
首页 > 数据库> > 为什么redis单线程模型会效率高

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

作者:互联网

  一: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