1. 소개
memcache 모듈은 메모리 캐싱, 특히 동적 웹 설계를 위한 절차적 프로그램과 객체 지향의 편리한 인터페이스를 제공하는 효율적인 데몬입니다. 프로그래밍 중 데이터베이스 액세스를 줄입니다.
memcache는 통신 대화를 위한 처리(session_handler)도 제공합니다.
Memcache 모듈에 대한 자세한 내용은 http://www.danga.com/memcached/에서 확인할 수 있습니다.
1.1.php.ini의 Memcache 구성 항목 목록
名称 | 默认值 | 可修改的范围 | 改变日志 |
memcache.allow_failover | “1” | PHP_INI_ALL | Available since memcache 2.0.2. |
memcache.max_failover_attempts | "20" | PHP_INI_ALL | Available since memcache 2.1.0. |
memcache.chunk_size | "8192" | PHP_INI_ALL | Available since memcache 2.0.2. |
memcache.default_port | "11211" | PHP_INI_ALL | Available since memcache 2.0.2. |
memcache.hash_strategy | "standard" | PHP_INI_ALL | Available since memcache 2.2.0. |
memcache.hash_function | "crc32" | PHP_INI_ALL | Available since memcache 2.2.0. |
session.save_handler | "files" | PHP_INI_ALL | Supported since memcache 2.1.2 |
session.save_path | "" | PHP_INI_ALL | Supported since memcache 2.1.2 |
PHP_INI_* 상수에 대한 자세한 내용과 정의는 PHP 매뉴얼 php.ini 구성 옵션을 참조하세요.
1.2. 설정 항목에 대한 간략한 설명은 다음과 같습니다
memcache.allow_failover Boolean
오류 발생 시 투명하게 처리를 위해 다른 서버로 전송됩니다(참고: 장애 조치는 동사입니다).
memcache.max_failover_attempts 정수
데이터를 설정하고 가져올 서버의 숫자 클래스를 정의합니다. memcache.allow_failover와 함께 사용됩니다.
memcache.chunk_size 정수
데이터가 지정된 크기( 이 값(chunk_size)이 작을수록 쓰기 작업 요청이 많아집니다. 설명할 수 없는 다른 속도 저하가 발견되면 이 값을 32768로 늘려보세요.
memcache.default_port string
Memcache 서버에 연결할 때 포트를 지정하지 않으면 기본 tcp 포트가 사용됩니다.
memcache.hash_strategy string
키를 서버에 매핑할 때 사용되는 전략을 제어합니다. 이 값을 일관되게 설정하면 해싱 알고리즘을 일관되게 사용할 수 있으며 서버가 풀에서 변수 추가 또는 제거를 승인할 때 다시 매핑되지 않습니다. 이 값을 설정하면 이전 전략을 사용할 때 표준 결과가 제공됩니다.
memcache.hash_function string
서버에 대한 키 매핑 프로세스에 적용할 hsah 함수를 제어합니다. 기본값은 "crc32"입니다. CRC32 알고리즘, "fnv"는 FNV-1a 알고리즘을 사용함을 의미합니다.
session.save_handler string
이 값을 memcache로 설정하여 통신 세션 처리(세션 핸들러)를 위한 Memcache 사용을 결정합니다.
session.save_path string
통화 저장에 사용되는 각 서버 링크에 대한 구분 기호를 정의합니다(예: "tcp://host1: 11211,tcp://호스트2:11211".
각 서버 링크에는 Memcache::addServer()를 사용하여 추가된 서버와 유사하게 해당 서버에서 허용되는 매개변수가 포함될 수 있습니다. 예: "tcp://host1:11211?pertant=1&weight=1&timeout =1& ;재시도 간격=15”.
1.3.memcache 상수 목록
名称 | 类型 | 描述 |
MEMCACHE_COMPRESSED | integer | 用于调整在使用 Memcache::set(), Memcache::add() 和 Memcache::replace() 几个函数时的压缩比率。 |
MEMCACHE_HAVE_SESSION | integer | 如果通信对话的处理(session handler)被允许使用其值为 1,其他情况值为 0。 |
2Memcache 기능 기능 목록
2.1.Memcache::connect
bool Memcache ::connect ( 문자열 $host [, int $port [, int $timeout ]] )
Memcache 서버에 연결
$host(string) 서버 도메인 이름 또는 IP
$port(int) 서버 tcp 포트 번호, 기본값은 11211
$timeout 연결 memcache 프로세스의 만료 시간, 모든 손실을 방지하려면 기본값 1을 수정하기 전에 두 번 생각해야 합니다. Memcache 캐싱의 장점은 연결 속도가 매우 느려진다는 것입니다.
성공하면 true, 실패하면 false
php
/* 절차적 API * /$memcache_obj = memcache_connect('memcache_host', 11211);
/* OO API */$memcache = new Memcache;
$memcache- > connect('memcache_host', 11211);
?> ;
2.2.Memcache::pconnect
bool Memcache::pconnect( string $host [, int $port [, int $timeout ]] )
상시 연결 모드로 서버에 연결
$host(string) 서버 도메인 이름 또는 ip
$port(int) 서버 tcp 포트 번호, 기본값은 11211
$timeout은 연결 Memcache 프로세스의 만료 시간입니다. Memcache 캐싱의 모든 이점을 잃고 연결이 매우 느려지는 것을 방지하려면 기본값인 1을 수정하기 전에 두 번 생각해야 합니다.
성공하면 true, 실패하면 false
php/* 절차적 API */ $memcache_obj = memcache_pconnect('memcache_host', 11211);/* OO API */ $memcache_obj = 새 Memcache;$memcache_obj ->pconnect('memcache_host', 11211); ?> ;
2.3.Memcache::close
bool Memcache::닫기(무효)
객체 닫기(상시 연결에서는 작동하지 않음)
성공하면 true, 실패하면 false 반환
php
/* 절차적 API */$ memcache_obj = memcache_connect('memcache_host', 11211);
/* 여기서 뭔가를 하세요 .. */
memcache_close( $memcache_obj);
/* OO API */$memcache_obj = 새 Memcache;
$memcache_obj->connect('memcache_host', 11211);
/* 여기서 뭔가를 하세요 .. */$memcache_obj->close();
?>
2.4.Memcache::addServer
bool Memcache::addServer( 문자열 $host [, int $port [ , bool $percious [, int $weight [, int $timeout [, int $retry_interval [, bool $status [, 콜백 $failure_callback ]]]]]] )
向对象添加一个服务器(注:addServer没有连接到服务器的动작품,所以在memcache进程没有启动的时候,执行addServer成功也会返回true)
호스트 服务器域name或 IP
포트 端口号,默认为 11211
지속적 是否使用常连接,默认为 TRUE
체중 权认个服务器设置中比值
시간 초과 连接服务器失效的秒数,修改默认值 1 时要三思,有可能失去所有缓存方优势导致连接变得很慢
retry_interval 服务器连接失败时的 重试频率 默认是 15 秒一次,如果设置为 -1 将禁止自动载了 中加载了 via dl() 时,无论本参数还是常连接设置参数city会失效。
每一个失败的服务器在失效前期 ,选择后端请求时会被跳过而不服务于请求.一个过期的连接将成功的连接或者被标记为失败的连接더 많은 부하가 발생합니다. 🎜>상태 控system服务器是否被标记为온라인, 设置这个参数为 FALSE 并设置 retry_interval 为 -1 可以使连接失败的服务器被放到一个描述不响应请求的服务器池子中,对这个服务器的请求将失败,接受设置为失败服务器的设置,默认参数为 TRUE, 代表该服务器可以被义为온라인.
failure_callback 失败时的回调函数 ,函数 两个参数为失败服务器호스트 이름 와 포트
2.4.3.返回值
2.4. 4.范例
php
$mem = new Memcache;
$is_add = $mem->addServer('localhost', 11211, 참, 1, 1, 15, 참); // retrt_interval=15$is_set = $mem->set('key1', '중화인민공화국');
?>
위 예시에서 localhost 서버가 다운되었거나 Memcache 데몬이 다운된 경우 실행 시 연결 요청 서버에 장애가 발생한 후 15초가 지나면 자동으로 서버에 연결을 시도하지만 이 15초 이내에는 서버에 연결하지 않습니다. 즉, 요청이 있는 한 서버에 연결을 시도합니다. 15초 이내에 이루어지지만 각 서버 연결에 대한 재시도는 독립적입니다. 예를 들어 한 번에 두 개의 서버를 추가했는데 하나는 localhost이고 다른 하나는 172.16.100.60입니다. 각각의 연결이 실패한 시간부터 계산하면 해당 서버는 요청이 있는 한 15초마다 해당 서버에 연결됩니다. 해당 서버.
2.4.4.2 retry_interval과 상태의 조합
php
$mem = 새 Memcache;
$is_add = $mem->addServer('localhost', 11211, 참, 1 , 1, -1 , false) // retrt_interval=-1, status=false $is_set = $mem->세트(' key1', '중화인민공화국');
?>
위의 retrt_interval=-1, status=false의 경우 연결에 실패한 서버는 요청에 응답하지 않는 풀에 배치되므로 키 할당 알고리즘에 영향을 주지 않습니다. 오류를 즉시 반환할지, 실패할지, 장애 조치할지 여부는 memcache.allow_failover 설정에 따라 다릅니다. set, add, replacement, get 및 기타 요청을 실행할 때 memcache 프로세스가 정상적으로 실행 중이더라도 실패하고 false를 반환합니다.
retry_interval과 함께 사용되는 것 외에도 상태만 사용하면 memcache::getServerStatu 함수에서 얻은 결과에 영향을 미칩니다.
상관없습니다. memcache 프로세스가 정상적으로 실행 중인지, 충돌이 발생했는지 상태가 true이면 getServerStatus의 결과가 true이고, 그렇지 않으면 false입니다.
그러나 memcache 프로세스가 정상적으로 실행 중일 때는 다음과 같이 설정합니다. , 추가, 교체, 가져오기 등의 기능이 적용되지 않습니다.
2.5.Memcache::add
bool Memcache::추가( 문자열 $key , 혼합 $var [, int $flag [ , int $expire ]] )
추가 캐싱할 데이터가 캐싱 데이터의 키로 서버에 존재하지 않는 경우
key " 문자
var 값, 정수 유형은 직접 저장되고, 다른 유형은 직렬화되어 저장되며, 최대값은 1M입니다
flag zlib 압축을 사용할지 여부 플래그=MEMCACHE_COMPRESSED일 경우 데이터가 매우 작은 경우에는 zlib 압축이 사용되지 않으며 데이터가 특정 크기에 도달한 경우에만 해당 데이터에 대해 zlib 압축이 수행됩니다. (최소값을 압축하기 위한 특정 테스트 데이터는 없습니다.)
expire 만료 시간, 0은 만료되지 않음을 의미하며 unix 타임스탬프 형식을 사용할 수 있으며 현재 시간으로부터의 초 수를 사용할 수 있습니다. 초 2592000보다 큼(30일)
성공하면 TRUE, 실패하면 FALSE를 반환합니다. 키가 이미 있으면 memcache:;add()의 다른 측면입니다. memcache와 동일하게 동작합니다. ::set은
< ;?php$memcache_obj = memcache_connect("localhost", 11211);/* 절차적 API */memcache_add($memcache_obj, 'var_key', ' 테스트 변수', FALSE, 30 ) ;/* OO API */$memcache_obj->add('var_key', '테스트 변수', 거짓, 30);?>
2.6.Memcache::replace
::replace( string $key , 혼합 $var [, int $flag [, int $expire ]] )
지정된 기존 키의 캐시 변수 내용 바꾸기php
$memcache_obj = memcache_connect('memcache_host ', 11211);
/* 절차적 API */
memcache_replace($memcache_obj, "test_key", "일부 변수" , 거짓, 30);
/* OO API */$memcache_obj->교체( "test_key", "일부 변수" , 거짓, 30);
?>
2.7.Memcache: :set
bool Memcache::set ( string $key , 혼합 $var [, int $flag [, int $expire ]] )
设置一个指定 키 的缓存变weight内容
키 缓存数据的键, 其长titude不能超过250个字符
var 值,整型将直接存储,其他类型将被序列化存储,其值最大为1M
플래그 是否使用 zlib 压缩 ,当flag=MEMCACHE_COMPRESSED的时侯 ,数据很small 时候不会采用 zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)
expire 过期时间,0 为永不过期,可使用 unix 时间戳格式或距离当前时间的秒数,设为秒数时不能大于 2592000 (30 天)
成功返回 TRUE,失败返回 FALSE。
php/* 절차적 API *//* memcached 서버에 연결 */$memcache_obj = memcache_connect('memcache_host', 11211); /*플래그 값으로 0을 사용하여 'var_key' 키가 있는 항목의 값 설정, 압축은 사용되지 않음 만료 시간은 30초*/memcache_set($memcache_obj, 'var_key', '일부 변수' , 0, 30);에코 memcache_get($memcache_obj, 'var_key');?>
php/* OO API */$memcache_obj = new Memcache;/* memcached 서버에 연결 */$memcache_obj->connect('memcache_host', 11211);/*'var_key' 키를 사용하여 항목 값 설정, 즉시 압축 만료 시간은 50초*/$memcache_obj->set( 'var_key', '정말로 큰 변수', MEMCACHE_COMPRESSED, 50);에코 $memcache_obj-> get('var_key');?>
2.8.Memcache::get
string Memcache::get ( string $key [, int &$flags ] )
배열 Memcache ::get ( array $keys [, array &$flags ] )
获取某个 key 的变weight缓存值
key 缓存值的键
플래그 如果是传址某个变weight,获取缓存值被set或是add的flag结果将被存于该变weight
返回缓存的指定 key 的变weight内容或者是在失败或该变weight的值不存在时返回 FALSE
如果传如果传流的key的数组中的key書不存在,返回的结果是一个空数组,반지则返回key与缓存值相关联的关联数组
php
/* 절차적 API */$ memcache_obj = memcache_connect('memcache_host', 11211);
$var = memcache_get($memcache_obj, 'some_key');
/* OO API */$memcache_obj = new Memcache;
$memcache_obj-> connect('memcache_host', 11211);
$var = $memcache_obj->get('some_key');
/*
키 배열을 매개변수로 사용할 수도 있습니다.
해당 항목을 서버에서 찾을 수 없는 경우 결과
배열 그러한 키는 단순히 포함되지 않습니다.
*//* 절차적 API */$memcache_obj = memcache_connect('memcache_host', 11211 );
$var = memcache_get($memcache_obj, 배열('some_key', 'another_key'));
//如果some_key,another_key불存재 $var = array();
//如果some_key,another_key存재 $var = array('some_key'=>'缓存值', 'another_key' =>'缓存值');
/* OO API */$memcache_obj = 새 Memcache;
$memcache_obj->connect('memcache_host', 11211);
$var = $memcache_obj->get(배열('some_key', 'second_key'));
?>
2.9.Memcache::delete
bool Memcache::삭제( 문자열 $key[, int $timeout ] )
删除某一个变weight的缓存
key 缓存的键 键值不能为null和'',当它等于前side两个值的时候php会有警告错误。
시간 초과 删除这项的时间,如果它等于0,这项将被立刻删除反之如果它等于30秒,那么这项被删除재30秒内
成功返回 TRUE,失败返回 FALSE.
2.9.4.范例
php
/* 절차적 API */$ memcache_obj = memcache_connect('memcache_host', 11211);
/* 10초 후에 항목이 서버에 의해 삭제됩니다.*/
memcache_delete($memcache_obj, 'key_to_delete', 10) ;
/* OO API */$memcache_obj = 새 Memcache;
$memcache_obj->connect('memcache_host ', 11211);
$memcache_obj->delete('key_to_delete', 10);
?>
2.10.Memcache::flush
bool Memcache::flush ( void )
공중의 공간이 없습니다.
2.10.2.返回值
< ;?php
/* 절차적 API */$memcache_obj = memcache_connect('memcache_host', 11211);memcache_flush (
$memcache_obj);
/* OO API */ $memcache_obj = 신규 Memcache;
$memcache_obj ->connect('memcache_host', 11211);
$memcache_obj->플러시();
?>
배열 Memcache::getExtendedStats ([ 문자열 $ 유형 [, int $slabid [, int $limit ]]] )
php
$memcache_obj = new Memcache;
$memcache_obj->addServer(‘memcache_host‘, 11211);
$memcache_obj->addServer(‘failed_host‘, 11211);
$stats = $memcache_obj->getExtendedStats(); print_r($stats);
?>
输出结果
Array(
[memcache_host:11211] => Array(
[pid] => 3756
[uptime] => 603011
[time] => 1133810435
[version] => 1.1.12
[rusage_user] => 0.451931
[rusage_system] => 0.634903
[curr_items] => 2483
[total_items] => 3079
[bytes] => 2718136
[curr_connections] => 2
[total_connections] => 807
[connection_structures] => 13
[cmd_get] => 9748
[cmd_set] => 3096
[get_hits] => 5976
[get_misses] => 3772
[bytes_read] => 3448968
[bytes_written] => 2318883
[limit_maxbytes] => 33554432
),
[failed_host:11211] =>
)
2.12.Memcache::getStats
array Memcache::getStats ([ string $type [, int $slabid [, int $limit ]]] )
获取最后添加服务器静态信息
type 静态信息类型,有效值包括{reset, malloc, maps, cachedump, slabs, items, sizes},依照一定规则协议这个可选参数是为了方便开发人员查看不同类别的信息而输入的标题
slabid 用于按指定类型联合设置 cache 堆为有效的片到堆中。缓存堆被被命令绑定到服务器上并被严格的用于调试用途
limit 用于按指定类型联合设置 cache 堆为输入的数字所限制的大小到堆,默认值为 100
返回一个服务器静态信息数组,失败时返回 FALSE
2.13.Memcache::getServerStatus
int Memcache::getServerStatus( 문자열 $host [, int $port ] )
호스트와 포트를 입력하여 해당 서버 정보를 가져옵니다
호스트 서버 도메인 이름 또는 IP
포트 포트 번호, 기본값은 11211
서버 상태를 반환하고, 0은 실패를 의미하고, 그 외의 경우에는 0이 아닌 숫자를 반환합니다.
php
/*OO API */$memcache = new Memcache;
$memcache->addServer('memcache_host', 11211);
echo $memcache- > /* 절차적 API */$memcache =
memcache_connect('memcache_host' , 11211);echo memcache_get_server_status($memcache, 'memcache_host',
11211);?>
2.14 .Memcache::getVersion2.14.1. 설명
문자열 Memcache
::서버의 버전 번호 정보를 가져옵니다2.14.2. 반환 값을 반환합니다. 서버 버전 번호 문자열, 실패 반환 FALSE 2.14.3. 예
php
/*OO API */
$memcache =
새 Memcache;$memcache->connect('memcache_host' , 11211
);echo $memcache->getVersion();
/* 절차적 API */$memcache =
memcache_connect('memcache_host', 11211 );echo memcache_get_version($memcache) ;?>
2.15.Memcache: :setCompressThreshold
::setCompressThreshold ( int
$thresholdfloat $min_savings ] ) 설정 압축 제한2.15.2. 매개변수threshold는 자동 압축을 제어하는 변수 길이의 최소값을 설정합니다.min_saving은 최소 압축 비율은 0 - 1 사이여야 하며 기본값은 0.2이며 이는 20%의 압축 비율을 나타냅니다. 2.15.3 반환 값
성공하면 TRUE를 반환합니다. 실패하면 거짓입니다.
php
/* OO API */$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->setCompressThreshold (20000, 0.2);
/* 절차적 API */$memcache_obj = memcache_connect('memcache_host', 11211);
memcache_set_compress_threshold($memcache_obj, 20000, 0.2);
?>
2.16.Memcache::setServerParams
bool Memcache::setServerParams ( string $host [, int $port [, int $timeout [, int $retry_interval [, bool $status [, 콜백 $failure_callback ]]]] )
Memcache 버전 2.1.0 后增加的函数,运行时设置服务器参数
host 服务器域name或 IP
port 端口号,默认为 11211
시간 초과 超时连接失效的秒数,修改默认值 1 时要 3思,有可能失去所有缓存方优势导致连接变得很慢
retry_interval 试频率,默认是 15 秒一次,如果设置为 -1 将禁止自动dl()을 통해 동적으로 当扩을 확장할 수 있습니다.的生存期,选择后端请求时会被跳过而不服务于请求.一个过期的连接将成功的连接或被标记为失败的连接等待下一次 这种效果就是说每一个 웹 서버 的子进程는 服务于页面时的试连接city에 있습니다.跟他们自己的试频率有关。
상태 控system服务器是否被标记为 online, 设置这个参数为 FALSE 并设置 retry_interval为 -1 可以使连接失败的服务器被放到一个描述不响应请求的服务器池子中,对这个服务器的请求将失败,接受设置为失败服务器的设置,默认参数为 TRUE, 代表该服务器可以被义为 온라인입니다.
failure_callback 失败时的回调函数 ,函数的两个参数为失败服务器의 호스트 이름과 포트
成功返回 TRUE,失败返回。
php
함수 _callback_memcache_failure($host, $port)
{
인쇄 " memcache '$host:$port' 실패했습니다";
}
/* OO API */$memcache = new Memcache;
// 오프라인 모드에서 서버 추가$memcache->addServer('memcache_host', 11211 , 거짓, 1, 1, -1, 거짓);
// 서버를 다시 온라인으로 전환$memcache->setServerParams('memcache_host', 11211, 1, 15, 참, '_callback_memcache_failure');
/* 절차적 API */$memcache_obj= memcache_connect('memcache_host', 11211);
memcache_set_server_params($memcache_obj, 'memcache_host', 11211, 1, 15, 참, '_callback_memcache_failure');
?>
2.17.Memcache::increment
int Memcache ::증분 ( 문자열 $key [, int $value ] )
给指정 키 的缓存变weight一个增值,如果该变weight不是数字时不会被转化为数字,这个增值将会加到该变weight원유의 数字 上,变weight不存不会新增变weight,对于压缩存储的变不weight 사용 가능한 본침법会失败。
key 缓存值的键
var 值,整型将直接存储,其他类型将被序列化存储
成功返回新的变weight值,失败返回 FALSE。
php
/* 절차적 API * /$memcache_obj = memcache_connect('memcache_host', 11211);
/* 2만큼 카운터 증가*/$current_value = memcache_increment($memcache_obj, '카운터', 2);
/* OO API */$memcache_obj = 새 Memcache;
$ memcache_obj->connect('memcache_host', 11211);
/* 카운터를 3씩 증가 */$current_value = $memcache_obj->increment('counter', 3);
?>
2.18.Memcache::decrement
int Memcache::감소( string $key [, int $value ] )
지정된 키의 캐시 변수에 감소 값을 지정합니다. 증가 연산과 유사하게 이 값은 원래 변수에서 빼집니다. 새 항목의 값은 숫자로 변환된 후 빼집니다. 0보다 작지 않아야 합니다. 해당 값 방법이 실패하므로 저장된 변수를 압축하는 데 이 함수를 사용하지 마십시오.
캐시 값의 키 키
var 값, 정수형은 직접 저장, 그 외의 유형은 직렬화하여 저장
은 성공하면 새로운 변수값을, 실패하면 FALSE를 반환합니다.
php
/* 절차적 API */$memcache_obj =memcache_connect('memcache_host', 11211);
/* 항목을 2만큼 감소 */$new_value = memcache_decrement($ memcache_obj, 'test_item', 2);
/* OO API */$memcache_obj = new Memcache;
$memcache_obj->connect('memcache_host', 11211);
/* 항목 3씩 감소 */$new_value = $memcache_obj->decrement('test_item', 3);
?>
2.19.memcache_debug
bool memcache_debug ( bool $on_off )
Memcache 디버거 사용 여부 설정 on 에서 값은 TRUE 또는 FALSE입니다. PHP 설치 중에 --enable-debug 옵션이 사용되는지 여부에 따라 이 함수는 사용된 경우에만 TRUE를 반환하고, 그렇지 않으면 항상 FALSE를 반환합니다.
on_off는 디버깅 모드 켜짐, TRUE 켜짐, FALSE 꺼짐을 설정합니다
php 설치 중에 --enable-debug 옵션이 사용되면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
이상으로 PHP의 memcache에 대한 개요를 다양한 측면에서 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.