zoukankan      html  css  js  c++  java
  • Redis--内存

     Redis的对象结构:

      typedef struct redisObject {

        unsigned type:4;  //类型

        unsigned encoding:4;  //编码

        int refcount;  //引用计数

        unsigned lru:22;  //淘汰策略,最近最少使用

        void *ptr;   //指向底层实现的数据结构

      } robj;

    Redis 用引用计数技术实现内存的回收机制

        1、创建新对象,并指向key时,计数器会初始化为1。

      2、被其它对象引用时,计数器+1。

      3、对象不被其它对象引用时,计数器-1。

      4、当对象计数器为0时,对象所占用的内存将会被释放。

    Redis的淘汰策略:当内存不足时,Redis会根据LRU(最近最少使用)腾出内存。   

      高版本的Redis中当内存达到极限时,内存淘汰策略主要采用了6种方式进行内存对象的释放操作

      1.volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放

      2.allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放

      3.volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放

      4.allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放

      5.volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作

      6.noeviction:不删除任意数据(但redis还会根据引用计数器进行释放呦~),这时如果内存不够时,会直接返回错误

    默认的内存策略是noeviction,在Redis中LRU算法是一个近似算法,默认情况下,Redis随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中可以通过maxmemory-samples的值来设置redis需要检查key的个数,但是栓查的越多,耗费的时间也就越久,但是结构越精确(也就是Redis从内存中淘汰的对象未使用的时间也就越久~)

  • 相关阅读:
    树线段hdu 4508 美素数(线段树)
    自定义context自定义Dialog之Progress(二)
    实现语言C语言简单实现五子棋
    调用博客paip.基于HTML gui界面的javascript JS实现SLEEP。。
    水印控件windows phone中,制作一个自定义的密码输入框控件,含图片,有水印,星号显示
    请求网络网络编程
    调试网页PAIP HTML的调试与分析工具
    输出流输入输入输出流
    标记协议http协议与XML书写规范及解析技术
    描述算法10673 Play with Floor and Ceil
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9822085.html
Copyright © 2011-2022 走看看