목차
初期阅读
cache_create
cache_destroy
cache_alloc 与 cache_free
最后一个
原理
可以做什么
客户端
服务器
迟迟到来的原理
데이터 베이스 MySQL 튜토리얼 memcached 源码阅读之原理篇

memcached 源码阅读之原理篇

Jun 07, 2016 pm 04:41 PM
memcached 원칙 소스 코드 읽다

初期阅读 初期我是一行一行的看,遇到很多库函数不认识,于是研究了一番。 后来发现方向跑错了,那些库函数是为了实现网络编程,与 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 的映射。
第二部分是 服务器,用于接收客户端的请求:查询,增加,删除,更新等操作。

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

노흡의 기능 및 원리 분석 노흡의 기능 및 원리 분석 Mar 25, 2024 pm 03:24 PM

nohup의 역할과 원리 분석 nohup은 유닉스 및 유닉스 계열 운영체제에서 사용자가 현재 세션을 종료하거나 터미널 창을 닫아도 백그라운드에서 명령을 실행하는 데 일반적으로 사용되는 명령입니다. 아직도 계속 처형되고 있다. 이번 글에서는 nohup 명령의 기능과 원리를 자세히 분석해보겠습니다. 1. nohup의 역할: 백그라운드에서 명령 실행: nohup 명령을 통해 사용자가 터미널 세션을 종료해도 영향을 받지 않고 장기 실행 명령이 백그라운드에서 계속 실행되도록 할 수 있습니다. 이건 실행해야 해

몰입형 리더와 함께 Microsoft Reader Coach를 사용하는 방법 몰입형 리더와 함께 Microsoft Reader Coach를 사용하는 방법 Mar 09, 2024 am 09:34 AM

이 기사에서는 Windows PC의 몰입형 리더에서 Microsoft Reading Coach를 사용하는 방법을 보여줍니다. 읽기 지도 기능은 학생이나 개인이 읽기를 연습하고 읽고 쓰는 능력을 개발하는 데 도움이 됩니다. 지원되는 애플리케이션에서 구절이나 문서를 읽는 것부터 시작하고, 이를 기반으로 Reading Coach 도구를 통해 읽기 보고서가 생성됩니다. 읽기 보고서에는 읽기 정확도, 읽는 데 걸린 시간, 분당 올바른 단어 수, 읽으면서 가장 어려웠던 단어가 표시됩니다. 또한 단어를 연습할 수 있어 전반적인 읽기 능력을 개발하는 데 도움이 됩니다. 현재 Office 또는 Microsoft365(웹용 OneNote 및 We용 Word 포함)만

Struts 프레임워크의 원칙과 실무에 대한 심층적인 토론 Struts 프레임워크의 원칙과 실무에 대한 심층적인 토론 Feb 18, 2024 pm 06:10 PM

Struts 프레임워크의 원리 분석 및 실제 탐색 JavaWeb 개발에서 일반적으로 사용되는 MVC 프레임워크인 Struts 프레임워크는 우수한 디자인 패턴과 확장성을 가지며 엔터프라이즈 수준 애플리케이션 개발에 널리 사용됩니다. 이 기사에서는 Struts 프레임워크의 원리를 분석하고 실제 코드 예제를 통해 이를 탐색하여 독자가 프레임워크를 더 잘 이해하고 적용할 수 있도록 돕습니다. 1. Struts 프레임워크의 원리 분석 1. MVC 아키텍처 Struts 프레임워크는 MVC(Model-View-Con)를 기반으로 합니다.

MyBatis의 배치 삽입 구현 원리에 대한 심층적인 이해 MyBatis의 배치 삽입 구현 원리에 대한 심층적인 이해 Feb 21, 2024 pm 04:42 PM

MyBatis는 다양한 Java 프로젝트에서 널리 사용되는 인기 있는 Java 지속성 계층 프레임워크입니다. 그중 일괄 삽입은 데이터베이스 작업의 성능을 효과적으로 향상시킬 수 있는 일반적인 작업입니다. 이번 글에서는 MyBatis에서 일괄 Insert의 구현 원리를 심층적으로 살펴보고 구체적인 코드 예제를 통해 자세히 분석해 보겠습니다. MyBatis의 일괄 삽입 MyBatis에서 일괄 삽입 작업은 일반적으로 동적 SQL을 사용하여 구현됩니다. 삽입된 여러 값을 포함하는 S를 구성하여

Linux chage 명령의 기능 및 작동 원리에 대한 심층 분석 Linux chage 명령의 기능 및 작동 원리에 대한 심층 분석 Feb 24, 2024 pm 03:48 PM

Linux 시스템의 chage 명령은 사용자 계정의 비밀번호 만료일을 수정하는 데 사용되는 명령이며, 계정의 사용 가능한 가장 긴 날짜와 가장 짧은 날짜를 수정하는 데에도 사용할 수 있습니다. 이 명령은 사용자 계정 보안 관리에 매우 중요한 역할을 하며 사용자 비밀번호의 사용 기간을 효과적으로 제어하고 시스템 보안을 강화할 수 있습니다. chage 명령 사용 방법: chage 명령의 기본 구문은 다음과 같습니다: chage [옵션] 사용자 이름 예를 들어, 사용자 "testuser"의 비밀번호 만료 날짜를 수정하려면 다음 명령을 사용할 수 있습니다.

아이디어에서 Tomcat의 소스 코드를 보는 방법 아이디어에서 Tomcat의 소스 코드를 보는 방법 Jan 25, 2024 pm 02:01 PM

IDEA에서 Tomcat 소스 코드를 보는 단계: 1. Tomcat 소스 코드를 다운로드합니다. 3. Tomcat 소스 코드를 봅니다. 4. Tomcat의 작동 원리를 이해합니다. 7. 도구 및 플러그인 사용 8. 커뮤니티에 참여하고 기여합니다. 자세한 소개: 1. Tomcat 소스 코드 다운로드 Apache Tomcat 공식 웹사이트에서 소스 코드 패키지를 다운로드할 수 있습니다. 일반적으로 이러한 소스 코드 패키지는 ZIP 또는 TAR 형식 등입니다.

MyBatis 페이징 플러그인의 원리에 대한 자세한 설명 MyBatis 페이징 플러그인의 원리에 대한 자세한 설명 Feb 22, 2024 pm 03:42 PM

MyBatis는 XML과 주석을 기반으로 하는 뛰어난 지속성 레이어 프레임워크입니다. 또한 간단하고 사용하기 쉬운 플러그인 메커니즘도 제공합니다. 그 중 페이징 플러그인은 가장 많이 사용되는 플러그인 중 하나입니다. 이 기사에서는 MyBatis 페이징 플러그인의 원리를 자세히 살펴보고 특정 코드 예제를 통해 설명합니다. 1. 페이징 플러그인 원리 MyBatis 자체는 기본 페이징 기능을 제공하지 않지만 플러그인을 사용하여 페이징 쿼리를 구현할 수 있습니다. 페이징 플러그인의 원리는 주로 MyBatis를 가로채는 것입니다.

Struts2 프레임워크의 작동 원리 및 구현에 대한 심층 분석 Struts2 프레임워크의 작동 원리 및 구현에 대한 심층 분석 Jan 05, 2024 pm 04:08 PM

Struts2 프레임워크의 원리 및 구현 방법 해석 소개: 널리 사용되는 MVC(Model-View-Controller) 프레임워크인 Struts2는 JavaWeb 개발에 널리 사용됩니다. 웹 계층을 비즈니스 논리 계층에서 분리하는 방법을 제공하며 유연하고 확장 가능합니다. 이 기사에서는 Struts2 프레임워크의 기본 원리와 구현 방법을 소개하고 독자가 프레임워크를 더 잘 이해할 수 있도록 몇 가지 구체적인 코드 예제를 제공합니다. 1. 프레임워크 원리: St

See all articles