ITKeyword,专注技术干货聚合推荐

注册 | 登录

redis内存预分配策略

beijing20120926 分享于 2013-11-15

推荐:Memcache内存分配策略

转自:http://tank.blogs.tkiicpp.com/2010/12/14/memcache%e5%86%85%e5%ad%98%e5%88%86%e9%85%8d%e7%ad%96%e7%95%a5/ 一、Memcache内存分配机制         关于这

sds.c/sdsMakeRoomFor 函数描述了 sdshdr 的这种内存预分配优化策略,

推荐:redis源码分析之redis内存管理

              redis是一个key-value的数据库,基于内存的,所以其内存管理是非常重要的,redis内存管理部分非常简单,主要在zmalloc.h和zmalloc.c两个文件中。

以下是这个函数的伪代码版本:

def sdsMakeRoomFor(sdshdr, required_len):

    # 预分配空间足够,无须再进行空间分配
    if (sdshdr.free >= required_len):
        return sdshdr

    # 计算新字符串的总长度
    newlen = sdshdr.len + required_len

    # 如果新字符串的总长度小于 SDS_MAX_PREALLOC
    # 那么为字符串分配 2 倍于所需长度的空间
    # 否则就分配所需长度加上 SDS_MAX_PREALLOC 数量的空间
    if newlen < SDS_MAX_PREALLOC:
        newlen *= 2
    else:
        newlen += SDS_MAX_PREALLOC

    # 分配内存
    newsh = zrelloc(sdshdr, sizeof(struct sdshdr)+newlen+1)

    # 更新 free 属性
    newsh.free = newlen - sdshdr.len

    # 返回
    return newsh

推荐:Redis 内存优化

Redis内部有很多的数据类型,这些在官方文档上都可以看到,下面是其内部优化的一些细节点: 1. String 和 数字,在Redis中如果存储的是“123”Redis是能够识别出

sds.c/sdsMakeRoomFor 函数描述了 sdshdr 的这种内存预分配优化策略, 以下是这个函数的伪代码版本: def sdsMakeRoomFor(sdshdr, required_len): # 预分配空间足够,无须再进行空间分配

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。