• memcached value最大限制只能是1M吗


    关于memcached的value最大是1M的限制很多人都知道,但是如果你以为我还要说这个事情,那你就错了。

    之前的老版本确实是只能是1M,但是根据git记录,其实2009年以后的版本这个value最大值已经是可配置的了,但是目前互联网上大多数资料,调整value最大值的方法还是去改源码。

    首先看下memcached的启动参数


    memcached --help | grep max-item-size

    -I, --max-item-size=<num> adjusts max item size
    1
    2
    3
    4
    5
    在跟踪的源码(略去了无关配置项),memcached.c


    static void settings_init(void) {
    ……
    settings.item_size_max = 1024 * 1024; /* The famous 1MB upper limit. */
    ……
    }
    1
    2
    3
    4
    5
    6
    7
    测试下


    memcached --max-item-size=3145728 // 3M
    1
    2
    3

    ini_set('memcached.compression_threshold', 1024 * 1024 * 3); // 调高 php memcached扩展压缩阀值


    $m = new Memcached();
    $m->addServer('127.0.0.1', 11211);
    $str = '';
    $len = 1024 * 1024 * 2;
    for ($i = 0; $i < $len; $i++) {
    $str .= 'v';
    }
    $m->set('k', $str);
    echo strlen($m->get('k'));
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    最后,虽然这个参数是可调整,但是还是建议用默认值,如果真的超过出现了超过1M的value,首先试试压缩(php memcached 扩展,在value超过2000的时候,默认使用fastlz压缩),如果还是大于1M,就把value分割,然后读的时候使用批量获取,比如php使用getMulti。


    <?php
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    $items = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
    );
    $m->setMulti($items);
    $result = $m->getMulti(array('key1', 'key3', 'badkey'), $cas);
    var_dump($result, $cas);
    ?>
    ---------------------
    作者:安木1991
    来源:CSDN
    原文:https://blog.csdn.net/weixin_42900065/article/details/81513199?utm_source=copy
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    SQLServer 时间差运算
    phpStudy
    解决Apache/PHP无法启动的问题
    apche的主配置文件)
    知识总结
    学完了js的知识,一起分享总结知识点
    JS的学习体会与分享
    SpringBoot -- pom.xml文件
    c++基本知识点
    c语言基本常识5
  • 原文地址:https://www.cnblogs.com/ExMan/p/9800821.html
Copyright © 2020-2023  润新知