热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

memcached源码阅读之原理篇

初期阅读初期我是一行一行的看,遇到很多库函数不认识,于是研究了一番。后来发现方向跑错了,那些库函数是为了实现网络编程,与memcached的本质没有关系。于是开始查看函数名了。cache_create初始化memcached.主要工作是生成一个cache_t对象。

初期阅读 初期我是一行一行的看,遇到很多库函数不认识,于是研究了一番。 后来发现方向跑错了,那些库函数是为了实现网络编程,与 memcached 的本质没有关系。 于是开始查看函数名了。 cache_create 初始化 memcached . 主要工作是生成一个 cache_t 对象。

初期阅读

初期我是一行一行的看,遇到很多库函数不认识,于是研究了一番。
后来发现方向跑错了,那些库函数是为了实现网络编程,与 memcached 的本质没有关系。
于是开始查看函数名了。

cache_create

初始化 memcached .

主要工作是生成一个 cache_t 对象。

cache_t* cache_create(const char *name, size_t bufsize, size_t align,
                      cache_constructor_t* constructor,
                      cache_destructor_t* destructor) {
    cache_t* ret = calloc(1, sizeof(cache_t));
    char* nm = strdup(name);
    void** ptr = calloc(initial_pool_size, sizeof(void*));
    ret->name = nm;
    ret->ptr = ptr;
    ret->freetotal = initial_pool_size;
    ret->cOnstructor= constructor;
    ret->destructor = destructor;
    ret->bufsize = bufsize;
    return ret;
}

cache_destroy

回收 memcached.

void cache_destroy(cache_t *cache) {
    while (cache->freecurr > 0) {
        void *ptr = cache->ptr[--cache->freecurr];
        if (cache->destructor) {
            cache->destructor(get_object(ptr), NULL);
        }
        free(ptr);
    }
    free(cache->name);
    free(cache->ptr);
    pthread_mutex_destroy(&cache->mutex);
    free(cache);
}

cache_alloc 与 cache_free

申请一个节点和释放一个节点

最后一个

这样又看了结果函数,发现还是没有涉及到 memcached 的本质,这些在创建 服务器,还是网络编程的知识。
虽然我不会网络编程。

原理

可以做什么

memcached 是以 key-val 的方式储存的 map
而且key是字符串, val 是一个对象。

客户端

客户端连接上 memcached 的服务器后,可以set设置内容,get查询内容了。
内容是通过 socket 的方式传给服务器的。
数据分两部分,一部分是key,一部分是val的序列化。

服务器

对于服务器来说,接收到的数据其实就是两个字符串的映射 map 所以这时就简单了。
直接实现一个 hash table 就行了。
刚好前几天我实现了一个精简版的 hash table, 刚好可以用上。
只不过需要加一个字符串val字段,而key字段永远是字符串。
又由于 key 是字符串,所以字符串的 hash 函数就不需要用户提供了。
对于 val 同样是这样,字符串判断相等直接 cmp 即可。

这样 memcached 就很容易实现了。

迟迟到来的原理

服务器端分两部分功能。
第一步分是 hash table 用于存储 string 到 string 的映射。
第二部分是 服务器,用于接收客户端的请求:查询,增加,删除,更新等操作。

客户端实现只有一部了:向服务器发送查询,增加,删除,更新等操作。

推荐阅读
  • 基于内存和 Redis 的两级 Java 缓存框架!
    👇👇关注后回复“进群”,拉你进程序员交流群👇👇Java两级缓存框架,可以让应用支持两级缓 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 电信网为不能访问联通服务器的网站_老板说网站慢,我们总结了三大阶段提升性能...
    作者:李平来源:https:www.cnblogs.comleefreemanp3998757.html前言在前一篇随笔《大型网站系统架构的演化》中&# ... [详细]
  • 开发笔记:Memcached高性能内存对象缓存系统
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Memcached高性能内存对象缓存系统相关的知识,希望对你有一定的参考价值。一、Memcached概述 ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
  • 实战项目memcached+tomcat+session+nginx在工作中的应用和配置
    环境介绍:公司根据实际需要搭建一个购物网站,当用户购物时可以将不同商品,放到同一个购物车中进行同时付款。环境的搭建:外网用户IP地址:1.1.1.1主机名:fanxiaohui用户 ... [详细]
  • 对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这 ... [详细]
  • 开发笔记:超全的《 Django 入门教程 》上线了,居然还免费!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了超全的《Django入门教程》上线了,居然还免费!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 相对于内存来说,磁盘的容量是非常大的,所以Linux内核实现了一个叫 内存交换 的功能--把某些进程的一些暂时用不到的内存页保存到磁盘中,然后把物理内存页分配给更紧急的用户使用,当 ... [详细]
  • Redis学习笔记(二) .NET中使用Redis
    Redis是一个用的比较广泛的KeyValue的内存数据库,新浪微博、Github、StackOverflow等大型应用中都用其作为缓存,Redis的官网为http:redis.io。最 ... [详细]
author-avatar
392399224_619416
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有