【问题标题】:Memcached not returning stored data properly codeigniter 3Memcached没有正确返回存储的数据codeigniter 3
【发布时间】:2017-10-15 08:08:15
【问题描述】:

我正在使用 memcached 存储机器人上消息中的一些数据,然后将其存储到 rethindkb 表中。 我有我写的用于存储的代码,还有一个检索数据的函数。

在准备数据方法的第一步(案例0)中,我创建了一个这样的数组

`[id = 123]`

并将其存储在 memcached 中 在该方法的第二步(案例 1)中,我检索存储的数据,然后将另一个元素附加到数据中,它看起来像这样

[id = 123, lang = english]

在 getPrepData 函数中,我检索此数据,以便从存储的存储数组中检索键的值。但是,当我检索数据并将其存储在日志中时,未设置 lang 键,它看起来像这样

[id = 123]

出于调试目的,在存储 lang 键之后,我从 memcached 中获取数据并记录下来,我得到了所需的输出。 使用 php 7 和 codeigniter 3。

有谁知道为什么会发生这种情况以及我该如何解决?

    <?php
class User extends CI_Model {
  private $data;
  private $prep_data;
  public function __construct(){

  }

  public function is_registered($id){
    require_once('application/third_party/rdb/rdb.php');
    $this->load->config('redb.php');
    $db = $this->config->item('redbdb');
    $con = r\connect(array('host' => 'localhost','db' => $db));
    $results = r\table('users')->filter(['tid' => $id])->count()->run($con);
    if($results == 0){
      return false;
    }
    return true;
  }

  public function register_prep($id,$step,$store=null){
    $this->load->driver('cache');

    switch($step){
      case(0):
      //Insert empty cache entry
      $x = $this->cache->memcached->get('prep_'.$id);
      if($x){
        $this->cache->memcached->delete('prep_'.$id);
      }
      $prep = ['tid' => $id];
      $this->cache->memcached->save('prep_'.$id,$prep,0);
      break;

      case(1):
      //insert language
      $prep = $this->cache->memcached->get('prep_'.$id);
      $prep['lang'] = $store;
      $this->cache->memcached->delete('prep_'.$id);
      $this->cache->memcached->save('prep_'.$id,$prep,0);
      $x = $this->cache->memcached->get('prep_'.$id);
      log_message('error','saved data on step 1 is : '.print_r($x,true));
      break;

      case(2):
      //Insert driver/passenger
      $prep = $this->cache->memcached->get('prep_'.$id);
      $prep['type'] = $store;
      $this->cache->memcached->save('prep_'.$id,$prep,0);
      break;

      case(3):
      //Insert contact
      $prep = $this->cache->memcached->get('prep_'.$id);
      $prep['contact'] = $store;
      $this->cache->memcached->save('prep_'.$id,$prep,0);
      break;

      case(4):
      //Finish
      $prep = $this->cache->memcached->get('prep_'.$id);
      //Insert to database
      require_once('application/third_party/rdb/rdb.php');
        $this->load->config('redb.php');
        $db = $this->config->item('redbdb');
        $con = r\connect(array('host' => 'localhost','db' => $db));
      r\table('users')->insert($prep)->run($con);
      //Delete from cache
      $this->cache->memcached->delete('prep_'.$id);
      break;
    }
  }

  public function getPrepdata($id,$var){
    $this->load->driver('cache');
    $x = $this->cache->memcached->get('prep_'.$id);
    log_message('error','fetched prep data is : '.print_r($x,true));
    return $x[$var];
  }

}

【问题讨论】:

    标签: php arrays codeigniter memcached rethinkdb


    【解决方案1】:

    你可以试试这个例子:

    $data = array(id => 123);
    if(empty($data)){
      $data = array(); // Declaring array
    }
    print_r($data);
    

    结果: 大批( 编号 => 123 )

    现在添加这个:

    $new_data = array(lang => english);
    
    array_push($data,$new_data); // Items will be add to array
    
    print_r($data);
    

    数组( ID => 123, lang => 英语 )

    你只想得到身份证号码:

    echo $data['id'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 2014-09-02
      • 2013-10-14
      相关资源
      最近更新 更多