【问题标题】:A few question about PHP memcache关于 PHP memcache 的几个问题
【发布时间】:2010-11-15 23:03:08
【问题描述】:

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 页面上使用?

【问题讨论】:

    标签: php memcached


    【解决方案1】:
    1. 是的,在尝试获取、删除等之前不会进行网络调用,因此在需要时分配对象并没有什么坏处。 (编辑:我在这里想到了“memcached”扩展,结果发现“memcache”扩展确实打开了与 memcache 服务器的连接,尽管命中最多可以忽略不计)

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

    3. $memcache_obj->flush();

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

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

    【讨论】:

    • 非常感谢,你是我在这个问题上看到很多你的帖子的 memcache 人。如果您想看的话,我还在上面添加了 1 个问题
    【解决方案2】:

    Jason 很好地回答了你的问题,但我想我会添加一些注释:

    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() 调用将使您朝着正确的方向前进。

    【讨论】:

      【解决方案3】:
      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,这会使服务器上的所有缓存项失效

      【讨论】:

        猜你喜欢
        • 2012-01-26
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 2011-08-24
        • 2013-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多