Memcached没有正确地返回存储的数据codeigniter 3
问题描述:
我正在使用memcached在bot上存储消息的一些数据,然后将其存储到rethindkb表中。 我有我写的用于存储下面的代码,还有一个用于检索数据的函数。Memcached没有正确地返回存储的数据codeigniter 3
在第一所述准备数据的方法的第一步骤中(情况0)中,i建立一个数组,如本
`[id = 123]`
并将其存储在分布式缓存 在第二步骤中的方法的(情况1)我检索所存储的数据,然后另一元件附加到数据,它看起来像这样
[id = 123, lang = english]
在getPrepData功能,我检索该数据,以便检索所存储的存储阵列的键的值。然而,当我检索数据,并将其存储在日志中,郎键不和它看起来像这样
[id = 123]
出于调试目的,存储郎键后,我拿来从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];
}
}
答
可以尝试这个例子:
$data = array(id => 123);
if(empty($data)){
$data = array(); // Declaring array
}
print_r($data);
结果: 阵列( ID => 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'];
你甚至看他的问题? – sintakonte