Closed allovine closed 6 years ago
读了下源码,怀疑是hiredis安装问题,然后测试下直接使用 CoRedis 试试,发现也没问题,肯定是swoft框架下的类处理出了问题。
$rd2 = new \Redis();
$rd2->connect("127.0.0.1",6379);
$rd2->select(6);
$rd2->hMset('myms3', array('name' => 'Joe', 'salary' => 2000));
$this->gameRedis->hMset('myms1', array('name' => 'Joe', 'salary' => 2000));
$this->gameRedis->hSet("myms1","d",4);
$rd3 = new CoRedis();
$rd3->connect("127.0.0.1",6379);
$rd3->select(6);
$rd3->hMset('myms4', array('name' => 'Joe', 'salary' => 2000));
127.0.0.1:6379[6]> hgetall myms1 1) "name" 2) "s:3:\"Joe\";" 3) "salary" 4) "i:2000;" 5) "d" 6) "i:4;" 127.0.0.1:6379[6]> hgetall myms4 1) "name" 2) "Joe" 3) "salary" 4) "2000" 127.0.0.1:6379[6]> hgetall myms3 1) "name" 2) "Joe" 3) "salary" 4) "2000" 5) "salery" 6) "111"
你的 swoft/redis 组件的版本是多少?
这个组件没看到什么地方写了版本号,只有 composer.json 里面要求是 "swoft/redis": "^1.0",
另外我跟踪到如下代码的时候还没问题:
/**
输出的都还正常,正在看可变参数的解析
看不到 Swoole\Coroutine\Redis 怎么解析的可变参数,不知道怎么办,老大能帮帮忙吗? @huangzhhui
配置里面REDIS_SERIALIZE=1的问题,谢谢回复 @huangzhhui
hgetall 返回的不是key=>value的形式,而是把所有的 key\value 都放到了数组里面
set\hmset\hset 时候,如果是整形的,设置完之后无法 hincrby 或者 incrby ,提示不是一个整形数字
例如如下代码: $rd2 = new \Redis(); $rd2->connect("127.0.0.1",6379); $rd2->select(6); $rd2->hMset('myms3', array('name' => 'Joe', 'salary' => 2000));
用原装的redis类执行后和内置的redis执行后,redis-cli 看到的是如图: 127.0.0.1:6379[6]> hgetall myms1
"name" "s:3:"Joe";" "salary" "i:2000;" "d" "i:4;" 127.0.0.1:6379[6]> hgetall myms3 "name" "Joe" "salary" "2000" "salery" "111" 而 myms1 是无法用 hincrby myms1 salary 1 的命令的,会提示 salary 不是整形
hgetall的问题,处理的时候就是不用 hgetall ,改用 hmget 就没事儿,但是 hmset 的int型字段实在没办法了。紧急求助!!!!!难道要抛弃内置的redis,采用原装的\Redis,自己再链接?