@PeterN
你说这是错的
$m->set('object', new stdclass, time() + 300);
而正确的方法应该是这样
$m->set('object', new stdclass, 300);
实际上,这两种方法都是正确的。过期时间会查看给定的时间,如果数字小于或等于 30 天(60 * 60 * 24 * 30 = 2,592,000),则会在这么多秒后过期。如果数字大于 30 天,则会在该 UNIX 时间过期。
(PECL memcached >= 0.1.0)
Memcached::set — 存储一个项目
Memcached::set() 将 value
存储在 memcache 服务器上,使用指定的 key
。 expiration
参数可用于控制何时将值视为已过期。
该值可以是任何有效的 PHP 类型,除了资源,因为资源不能以序列化形式表示。如果 **Memcached::OPT_COMPRESSION
** 选项已启用,则序列化后的值也会在存储之前被压缩。
成功时返回 true
,失败时返回 false
。如果需要,请使用 Memcached::getResultCode()。
示例 #1 Memcached::set() 示例
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdClass, time() + 300);
var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
?>
上面的示例将输出类似于以下内容
int(99) string(15) "a simple string" array(2) { [0]=> int(11) [1]=> int(12) } object(stdClass)#1 (0) { }
@PeterN
你说这是错的
$m->set('object', new stdclass, time() + 300);
而正确的方法应该是这样
$m->set('object', new stdclass, 300);
实际上,这两种方法都是正确的。过期时间会查看给定的时间,如果数字小于或等于 30 天(60 * 60 * 24 * 30 = 2,592,000),则会在这么多秒后过期。如果数字大于 30 天,则会在该 UNIX 时间过期。
在示例中,它显示
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);
但这错了。
它不会过期,至少不会在很长很长时间内过期。
所以,不要使用 time() + 秒,而是使用
$m->set('object', new stdclass, 300);
它将在 5 分钟后正确过期。
注意:使用 memcached 2.1.0 稳定版(通过 PECL)。
与 Memcache 不同,Memcached 不会自动将键中的空格替换为下划线,而是会按原样发送键,这会导致错误,从而导致键和值不匹配。您可以通过在存储之前移除/替换空格,或将 Memcached::OPT_BINARY_PROTOCOL 选项设置为 true 来避免此问题。
00 = MEMCACHED_SUCCESS
01 = MEMCACHED_FAILURE
02 = MEMCACHED_HOST_LOOKUP_FAILURE // 仅限 getaddrinfo() 和 getnameinfo()
03 = MEMCACHED_CONNECTION_FAILURE
04 = MEMCACHED_CONNECTION_BIND_FAILURE // 已弃用,请参见 MEMCACHED_HOST_LOOKUP_FAILURE
05 = MEMCACHED_WRITE_FAILURE
06 = MEMCACHED_READ_FAILURE
07 = MEMCACHED_UNKNOWN_READ_FAILURE
08 = MEMCACHED_PROTOCOL_ERROR
09 = MEMCACHED_CLIENT_ERROR
10 = MEMCACHED_SERVER_ERROR // 服务器返回 "SERVER_ERROR"
11 = MEMCACHED_ERROR // 服务器返回 "ERROR"
12 = MEMCACHED_DATA_EXISTS
13 = MEMCACHED_DATA_DOES_NOT_EXIST
14 = MEMCACHED_NOTSTORED
15 = MEMCACHED_STORED
16 = MEMCACHED_NOTFOUND
17 = MEMCACHED_MEMORY_ALLOCATION_FAILURE
18 = MEMCACHED_PARTIAL_READ
19 = MEMCACHED_SOME_ERRORS
20 = MEMCACHED_NO_SERVERS
21 = MEMCACHED_END
22 = MEMCACHED_DELETED
23 = MEMCACHED_VALUE
24 = MEMCACHED_STAT
25 = MEMCACHED_ITEM
26 = MEMCACHED_ERRNO
27 = MEMCACHED_FAIL_UNIX_SOCKET // 已弃用
28 = MEMCACHED_NOT_SUPPORTED
29 = MEMCACHED_NO_KEY_PROVIDED /* 已弃用。请使用 MEMCACHED_BAD_KEY_PROVIDED! */
30 = MEMCACHED_FETCH_NOTFINISHED
31 = MEMCACHED_TIMEOUT
32 = MEMCACHED_BUFFERED
33 = MEMCACHED_BAD_KEY_PROVIDED
34 = MEMCACHED_INVALID_HOST_PROTOCOL
35 = MEMCACHED_SERVER_MARKED_DEAD
36 = MEMCACHED_UNKNOWN_STAT_KEY
37 = MEMCACHED_E2BIG
38 = MEMCACHED_INVALID_ARGUMENTS
39 = MEMCACHED_KEY_TOO_BIG
40 = MEMCACHED_AUTH_PROBLEM
41 = MEMCACHED_AUTH_FAILURE
42 = MEMCACHED_AUTH_CONTINUE
43 = MEMCACHED_PARSE_ERROR
44 = MEMCACHED_PARSE_USER_ERROR
45 = MEMCACHED_DEPRECATED
46 = MEMCACHED_IN_PROGRESS
47 = MEMCACHED_SERVER_TEMPORARILY_DISABLED
48 = MEMCACHED_SERVER_MEMORY_ALLOCATION_FAILURE
49 = MEMCACHED_MAXIMUM_RETURN /* 始终在添加新的错误代码之前添加 */
11 = MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE = MEMCACHED_ERROR
如果将值设置为 false,则该方法将正确地返回 false。这意味着为了设置适当的故障检查机制,您需要检查结果代码。
<?php
$Memcached = new Memcached();
$Memcached->addServer('localhost', 11211);
$Memcached->set('key', false);
var_dump($Memcached->get('key')); // boolean false
var_dump($Memcached->getResultCode()); // int 0 which is Memcached::RES_SUCCESS
?>