php中memcached怎么存多维数组

 瑶瑶2502863511 发布于 2022-12-01 11:18

我想问下php中memcached怎么存多维数组?
比如我想缓存多个用户发的帖子标题,数组形式是这样的:

php$user1=array(
    array('title'=>'帖子1','time'=>'2015-07-08'),
    array('title'=>'帖子2','time'=>'2015-07-09'),
);

假设user1的UID是1001,我想通过UID得到他所发的帖子缓存,不知道怎么弄。
另外Redis里面也能用吗?
求大虾指点,感激不尽。

11 个回答
  • PHP的Memcached的驱动会自动进行serialize和unserialize,你所需要做的是:
    1. 选取一个合适key,比如 "POST_OF_USER_" . $userId
    2. 调用set函数把数据丢进去就行了

    示例代码:

    // 0. 准备:
    $cache = new Memcache();
    $cache->connect('127.0.0.1', 11211); // 请替换为你的memcache服务器地址和端口
    $userId = // 你自己想办法获取...
    
    // 1. 构造cache KEY
    $cacheKey = "POSTS_OF_USER_" . $userId;
    
    // 2. 从缓存中获取数据
    $posts = $cache->get($cacheKey);
    if ($posts === false){ 
        // 3. 缓存失效了,加载数据
        $posts = // 你自己想办法加载数据
    
        // 4. 保存数据到缓存中
        $cache->set($cacheKey, $posts);    
    }
    
    // OK,可以使用posts了
    
    
    2022-12-01 11:48 回答
  • 1.memcache或者redis键值只能是字符串或者整型数组,所以数组必须串行化
    2.serialize,json_encode皆可以串行化
    3.PHP建议用serialize

        $array  = array();
        $string = serialize($array);
        $memcache->set('key',$string);
        $result = $memcache->get('key');
        $result = unserialize($result); 
    
    2022-12-01 11:48 回答
  • array('user1Id'=>array(
                            array('title'=>'帖子1','time'=>'2015-07-08'),
                            array('title'=>'帖子2','time'=>'2015-07-09')
                           ),
           'user2Id'=>array()
          )
    

    这样可否

    2022-12-01 11:48 回答
  • key:prefix + userId
    value:[{"title":"\u5e16\u5b501","time":"2015-07-08"},{"title":"\u5e16\u5b502","time":"2015-07-09"}]

    memcache只支持基本的数据存储,如字符串,不支持复杂结构如map等
    所以结构化的数据,可以串行化后作为值存储。
    串行化的方法有很多,比如json_encode();

    2022-12-01 11:48 回答
  • 数组不用转成字符串,直接存数组就行了

    2022-12-01 11:48 回答
  • 我是使用 json_encode 配合 urlencode 来序列化结果集,之后再保存在memcache中

    2022-12-01 11:48 回答
  • memcache的话,建议序列化或者json_encode成string之后进行存储。redis有更丰富的数据类型,也可以考虑,hashset。

    2022-12-01 11:48 回答
  • 转成json字符串扔进去

    2022-12-01 11:48 回答
  • 你可以直接存数据进去都是可以的,Mecached扩展底层会帮你处理的。

    2022-12-01 11:48 回答
  • 多个用户是多少? 如果是可知的 推荐还是用json_encode()后,存入到memcache中,按三维数组的结构,并不推荐serialize

    2022-12-01 11:48 回答
  • 看看官方示例吧,不需要自己把数组进行序列化:

    
    <?php
    $m = new Memcached();
    $m->addServer('localhost', 11211);
    
    $m->set('int', 99);
    $m->set('string', 'a simple string');
    $m->set('array', array(11, 12));
    /* 'object'这个key将在5分钟后过期 */
    $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'));
    ?>
    

    memcached可以存字符串,数组,对象,整形多种类型,自动序列化。

    2022-12-01 11:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有