yii2 memcache 跨平台交互 键和值不一样
1 首先在配置文件中加载
web\basic\config\web.php
........
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'zhaoyang',
],
'mecache' => [
'class' => 'yii\caching\MemCache',
'useMemcached' =>0, //这里简单说明一下 0是memcache, 1是memcached 两个是php里不同的扩展
'servers' => [
[
'host' => 'localhost',
'port' => 11211,
]
],
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
............
2 调用memcache
$mecache = Yii::$app->mecache;
$mecache->set("key","value", 60);
$mecache->get("key");
一般这么用是可以的,一点问题都没有
但是我与java 那边的memcache交出了问题
java 写的memcache,我拿不到
php 写的memcache, java拿不到
3 解决方法
web\basic\vendor\yiisoft\yii2\caching\Cache.php
//重写2个方法, 读写都调用这个方法 public function myset($key, $value, $duration = 0, $dependency = null)
{
return $this->setValue($key, $value, $duration);
} public function myget($key)
{
return $this->getValue($key);
}
下面解释为什么这么做, 简单来讲, 程序做了加密, 去掉加密的那一层, php java 都读写统一就行了
4 分析
① $mecache = Yii::$app->mecache;
② \basic\vendor\yiisoft\yii2\caching\MemCache.php
③ class MemCache extends Cache 即成自cache \basic\vendor\yiisoft\yii2\caching\Cache.php
④ 查看原来yii2 的set 和 get 都做了加密处理
public function get($key)
{
$key = $this->buildKey($key);
$value = $this->getValue($key);
if ($value === false || $this->serializer === false) {
return $value;
} elseif ($this->serializer === null) {
$value = unserialize($value);
} else {
$value = call_user_func($this->serializer[1], $value);
}
if (is_array($value) && !($value[1] instanceof Dependency && $value[1]->getHasChanged($this))) {
return $value[0];
} else {
return false;
}
} public function set($key, $value, $duration = 0, $dependency = null)
{
if ($dependency !== null && $this->serializer !== false) {
$dependency->evaluateDependency($this);
}
if ($this->serializer === null) {
$value = serialize([$value, $dependency]);
} elseif ($this->serializer !== false) {
$value = call_user_func($this->serializer[0], [$value, $dependency]);
}
$key = $this->buildKey($key); return $this->setValue($key, $value, $duration);
}
⑤ 按照上面的方法添加两个没有加密的直接读写 的memcache 问题就解决了
yii2 memcache 跨平台交互 键和值不一样的更多相关文章
- PHP实现查询Memcache内存中的所有键与值
使用Memcache时,我们可以用memcache提供的get方法,通过键查询到当前的数据,但是有时候需要查询内存中所有的键和值,这个时候可以使用下面的代码实现: <?php /** * Cre ...
- SQLServer 自增主键创建, 指定自增主键列值插入数据,插入主键
http://blog.csdn.net/zh2qiang/article/details/5323981 SQLServer 中含自增主键的表,通常不能直接指定ID值插入,可以采用以下方法插入. 1 ...
- php中的不常用数组函数(一)(数组中元素的键和值对调 array_flip())
array_flip($arr); //交换数组中的键和值. //如下所示,如果$arr中有相同的值.交换之后 会被旧的覆盖,最后一个有效. /***********array_flip(交换数组中的 ...
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法
.net中要连接mysql数据库,需要引用MySql.Data.dll文件,这文件在mysql官网上有下载. 接着通过MySqlCommand执行插入语句后想要获取该数据主键id值的方法如下: lon ...
- Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值
package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...
- Android(java)学习笔记104:Map集合的遍历之键找值
package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...
- Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值
1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对 思路: A: 获取所有结婚证的集合 B: 遍历结婚证的集合,得到每一个结婚证 C: 根据结婚证获取丈夫和妻子 转换: A: ...
- 关于JavaScript对象的键和值
一个JavaScript对象由键和值组成. 当一个给定键的值被设置为一个字符串.布尔值.数字.数组或对象时,我们把这个键称为属性. 当把键设置为函数时,我们把它叫做方法.
- veridata实验例(5)在更改主键列值,update操作将被分成两个语句
veridata实验例(5)更改主键列值,update操作将被分成两个语句 续接"veridata实验举例(4)验证veridata查找出updata.delete操作导致的不同步现象&qu ...
随机推荐
- 2017-2018-1 Java小组-1623 第一周作业
2017-2018-1 Java小组-1623 第一周作业 <构建之法>学习笔记及团队成员介绍 1. 学习内容 概论 个人技术和流程 软件工程师的成长 两人合作 团队和流程 敏捷流程 实战 ...
- System.Data.SQLite未能加载文件或程序集
1.简直是作死帝呀.不需要修改dll的名字,否则就坐等悲剧吧 如果项目中有x86和x64的dll,可以建两个不同的文件夹分别存放,但是千万不要修改掉默认的dll的名字 System.Data.SQLi ...
- POJ 2240 Arbitrage(判正环)
http://poj.org/problem?id=2240 题意:货币兑换,判断最否是否能获利. 思路:又是货币兑换题,Belloman-ford和floyd算法都可以的. #include< ...
- Vi/Vim三种模式
命令模式,底线命令模式,输入模式:
- JAVA基础知识详解
1. JVM是什么 JVM是Java Virtual Mechine的缩写.它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机. JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了 ...
- Ant是什么
Ant是什么? 一.总结 一句话总结: 编译 打包 测试 工具 xml Ant是Java的生成工具,是Apache的核心项目: Ant类似于Unix中的Make工具,都是用来编译.生成: Ant是跨平 ...
- Gitlab项目用ssh克隆
Gitlab项目用ssh克隆 1. 新建一个文件夹并用git bash here 打开 2. 在git bash here 输入命令行 ssh-keygen –t rsa –C“邮箱名” 3. ...
- bzoj 1854 构图 并查集
我们可以把一件装备看成一条边,两个属性看成两个点,那么这就相当于读入了一张图 当读入每一个x,y时,我们找到两个点的祖先节点,fx,fy,我们保证祖先节点在该连通块 中编号(装备属性)最大,用flag ...
- PHP:第五章——字符串过滤函数
<?php header("Content-Type:text/html;charset=utf-8"); //字符串过滤函数: //1.n12br 在所有新行之前插入Htm ...
- 获得文件路径 _pgmptr, _makepath, _splitpath
#include <stdlib.h> #include <stdio.h> int main(void) { char path_buffer[_MAX_PATH]; cha ...