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从内存中淘汰的对象未使用的时间也就越久~)

  • 相关阅读:
    idea快捷的输出常用语句
    OneinStack基础搭建typecheo轻量级博客
    自动化框架介绍及使用
    jenkins配置自动化
    selenium模拟鼠标点击
    Linux下安装nginx
    解决“chrome正受到自动测试软件的控制”信息栏显示问题
    Git 常用操作
    ZendStudio自定义代码补全,自定义代码段
    07-python之装饰器
  • 原文地址:https://www.cnblogs.com/chen--biao/p/9822085.html
Copyright © 2011-2022 走看看