为什么php redis返回的数据带有冒号?

gg58donl  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(164)

问题

我写了一个多线程实现的代码,并尝试使用redis作为计数器,这是我的代码。当我尝试使用redis作为计数器时,我经常会在值中得到':'(冒号),有时不会,是因为我循环太快,redis甚至没有注意到吗?

输出结果

cclilshy@192 debug % php st.php
registerRedis success!
registerSocket success!
1
2
3
1
2
string(2) ":5"
1
2
3
string(2) ":9"
3
string(1) "9"

// the up is the output. Why?

编号

$func = function($handle){
    for($i=0;$i<3;$i++){
        echo $handle->counter().PHP_EOL;
    }

    var_dump($handle->total());
};

//$handle->counter() :
public function counter($record = true){
        if($record = false){
            return $this->count;
        }
        $this->thread->counter();
        $this->count++;
        return $this->count;
}

//$handle->total() :
public function total(){
        return $this->thread->counter(false);
}

//$handle->thread->counter() : 
public function counter($record = true){
        if($record === false){
            return $this->redis->get('thread.' . $this->pids[0] . '.count');
        }
        return $this->redis->incr('thread.' . $this->pids[0] . '.count');
}
mf98qq94

mf98qq941#

Redis的设计是单线程的,所以它总是以同步的方式为你的线程服务。
响应如下所示,因为未解析RESP协议,它向您返回整数原始表示形式
是的,其中一个原因可能是解析器进程在您已经返回下一个值时仍被阻塞

相关问题