【发布时间】: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