【 可直接参看: http://phpor.net/blog/post/888 】
上篇文章解决了PHP的Memcache 模块的get方法不区分连接失败和NOT FOUND, 今天说一下delete方法不区分NOT FOUND和连接失败的处理办法。
这次的修改不同上次,虽然delete也有第二个参数,但是第二个参数不是引用(当然可以修改成引用,只是稍微麻烦一点);根据delete的特点,不妨将返回值修改为整型(long型); 代码如下:
==== memcache.c =======
- PHP_FUNCTION(memcache_delete)
- {
- …
- if (!mmc_get_pool(mmc_object, &pool TSRMLS_CC) || !pool->num_servers) {
- RETURN_LONG(-1); // 此处修改
- }
- if (mmc_prepare_key_ex(key, key_len, key_tmp, &key_tmp_len TSRMLS_CC) != MMC_OK) {
- RETURN_LONG(-1); // 此处修改
- }
- while (result < 0 && (mmc = mmc_pool_find(pool, key_tmp, key_tmp_len TSRMLS_CC)) != NULL) {
- if ((result = mmc_delete(mmc, key_tmp, key_tmp_len, time TSRMLS_CC)) < 0) {
- mmc_server_failure(mmc TSRMLS_CC);
- }
- }
- if (result > 0) {
- RETURN_LONG(1); // delete OK
- } elseif(result == 0) {
- RETURN_LONG(0); // not found
- }
- RETURN_LONG(-1); // connect fail
- }
测试代码如下:
- <?php
- $m = new Memcache();
- $m->addServer(“127.0.0.1”, 11211); // this is available
- $result = $m->delete(“noexists”);
- var_dump($result);
- $m->set(“exists”,“I am here”,0,600);
- $result = $m->delete(“exists”);
- var_dump($result);
- $m = new Memcache();
- $m->addServer(“127.0.0.1”, 11214); // this is available
- $result = $m->delete(“noexists”);
- var_dump($result);
输出:
int(0)
int(1)
int(-1)
这样修改以后,确实挺好用的,但是,和原来的用法已经不兼容了,除非你原来根本就不判断返回值。