关于PHP memcache的几个问题

时间:2009-07-31 22:47:53

标签: php memcached

1)
我明白我可以称之为

$memcache_obj = memcache_connect('memcache_host', 11211);

在我的网站的头文件中,对不使用memcache的页面没有影响 但是这个呢?

$memcache->connect('127.0.0.1', 11211);

是否应该在页面到页面的基础上调用它?


2)
如果服务器没有足够的内存来写新的缓存并且memcache尝试存储缓存怎么办?


第3)
我知道钥匙可以有30天的使用寿命, 有没有办法将所有密钥刷新内存,对测试阶段特别有用?

4)
另外这个代码,第一个变量是连接,所以例如如果我在一个页面上有5个部分,从memcache添加/更新/删除,我是否需要每次运行此连接,或者是否可以连接1次并完成所有操作每页加载?

memcache_set($memcache_obj, 'var_key', 'some variable', 0, 30)

5) 是否有一个函数或任何东西可以显示有多少内存可用并在php页面上使用?

3 个答案:

答案 0 :(得分:8)

  1. 是的,在尝试获取,删除等之前不会进行任何网络调用,因此在需要时分配对象不会有任何损害。 (编辑:我在想这里的“memcached”扩展,事实证明“memcache”扩展确实打开了与memcache服务器的连接,虽然命中率最多可以忽略不计)

  2. memcache将删除最少使用的项目以尝试为新对象腾出空间

  3. $ memcache_obj->冲洗();

  4. 每次脚本运行时只需连接一次,最简单的方法是将连接放在页面顶部或类构造函数中

  5. $ memcache_obj-> getStats()http://www.php.net/manual/en/function.memcache-getstats.php

答案 1 :(得分:3)

杰森很好地回答了你的问题,但我想我会添加一些注意事项:

2)请注意,如果您尝试将超过1MB(默认值)存储到密钥中,则memcache扩展将返回FALSE值。如果由于任何原因无法写入密钥,它也将返回FALSE。

3)密钥可以具有> 30天的寿命(TTL)。只需将TTL添加到当前时间并将其用作TTL即可。使用您的示例调用,它可能是这样的(编码为清晰):

$ttl = 60*60*24*60; // 60 days
$newTTL = time()+$ttl;
memcache_set($memcache_obj, 'cache_key', 'some data', 0, $newTTL)

5)如果你在谈论PHP内存,那么memory_get_usage()将为你提供你想要的东西。 Memcache内存有点难度,但使用getStats()调用会让你朝着正确的方向前进。

答案 2 :(得分:1)

  1. http://uk3.php.net/manual/en/function.memcache-connect.php表示memcache_connect()与实例化Memcache并在其上调用connect()相同
  2. http://code.google.com/p/memcached/wiki/FAQ#What_is_memcached%27s_cache?说“如果服务器内存不足,首先更换过期的板坯,然后下一个最旧的未使用的板坯。”
  3. 重新启动memcached实例,或调用flush,这将使服务器上的所有缓存项无效