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 的映射。
第二部分是 服务器,用于接收客户端的请求:查询,增加,删除,更新等操作。
客户端实现只有一部了:向服务器发送查询,增加,删除,更新等操作。
本文出自:http://tiankonguse.github.io, 原文地址:http://blog/2014/11/06/memcached-code/, 感谢原作者分享。

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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

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