Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

yac 读取出来数据不正确 #128

Open
adele-php opened this issue Oct 25, 2023 · 1 comment
Open

yac 读取出来数据不正确 #128

adele-php opened this issue Oct 25, 2023 · 1 comment

Comments

@adele-php
Copy link

adele-php commented Oct 25, 2023

环境:php7.4 yac2.3.1
yac配置
image

所有用户请求的同一个key,存在较大的并发,代码如下:

    $key = RedisKey::USER_GROUP_CONDITION_V2 . $id;
    $yac = new \Yac();
    $redis = \Yii::$app->redis;
    $data =$yac->get($key);
    if (!$data) {
        $data = $redis->get($key);
        if ($data) {
             $yac->set($key, $data, 600);
        }
    }
    if (!$data) {
        $data = self::getInfoById($id);
        $redis->setex($key, 86400, serialize($data));
    } else {
            $data = unserialize($data);
    }

unserialize()会报错。unserialize(): Error at offset 2620 of 2621 bytes。

serialize($data)数据如下(但是我本地测试是正常的,放到正式环境就会必现):

a:2:{s:17:"condition_version";s:1:"2";s:9:"condition";a:3:{i:0;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"38";s:10:"label_name";s:15:"A/B>测试分组";s:9:"condition";a:2:{s:5:"field";s:12:"user_id_4mod";s:10:"level_list";a:2:{i:0;a:3:{s:5:"level";s:1:"2";s:4:"name";s:4:"B组";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"1";}}}}i:1;a:3:{s:5:"level";s:1:"4";s:4:"name";s:4:"D组";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"3";}}}}}}}i:1;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"16";s:10:"label_name";s:21:"剔除应用版本号";s:9:"condition";a:2:{s:5:"field";s:7:"version";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"7";s:4:"name";s:11:"2.3.0以下";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:6:"not_in";s:6:"values";a:73:{i:0;s:5:"1.0.0";i:1;s:5:"1.0.2";i:2;s:5:"1.0.4";i:3;s:5:"1.0.6";i:4;s:5:"1.0.8";i:5;s:5:"1.1.0";i:6;s:5:"1.1.2";i:7;s:5:"1.1.4";i:8;s:5:"1.1.5";i:9;s:5:"1.1.6";i:10;s:5:"1.1.7";i:11;s:5:"1.1.8";i:12;s:5:"1.2.0";i:13;s:5:"1.2.1";i:14;s:7:"1.2.1.1";i:15;s:7:"1.2.1.2";i:16;s:5:"1.2.2";i:17;s:5:"1.2.3";i:18;s:5:"1.2.4";i:19;s:7:"1.2.4.1";i:20;s:5:"1.2.6";i:21;s:5:"1.2.8";i:22;s:7:"1.2.8.1";i:23;s:5:"1.3.0";i:24;s:7:"1.3.0.1";i:25;s:5:"1.3.2";i:26;s:5:"1.3.4";i:27;s:7:"1.3.4.1";i:28;s:5:"1.3.5";i:29;s:5:"1.3.6";i:30;s:5:"1.4.0";i:31;s:7:"1.4.0.1";i:32;s:5:"1.4.2";i:33;s:5:"1.4.4";i:34;s:5:"1.4.6";i:35;s:7:"1.4.6.1";i:36;s:7:"1.4.6.2";i:37;s:5:"1.4.7";i:38;s:5:"1.4.8";i:39;s:5:"1.5.0";i:40;s:7:"1.5.0.1";i:41;s:5:"1.5.4";i:42;s:7:"1.5.4.1";i:43;s:7:"1.5.4.2";i:44;s:5:"1.5.6";i:45;s:5:"1.5.8";i:46;s:5:"1.6.0";i:47;s:7:"1.6.0.1";i:48;s:5:"1.6.4";i:49;s:7:"1.6.4.1";i:50;s:7:"1.6.4.2";i:51;s:5:"1.6.6";i:52;s:5:"1.7.0";i:53;s:7:"1.7.0.1";i:54;s:7:"1.7.0.2";i:55;s:5:"1.7.2";i:56;s:5:"1.7.4";i:57;s:5:"1.7.8";i:58;s:5:"1.8.0";i:59;s:5:"1.8.4";i:60;s:5:"1.8.8";i:61;s:7:"1.8.8.1";i:62;s:5:"1.8.9";i:63;s:5:"1.9.0";i:64;s:5:"1.9.4";i:65;s:5:"1.9.8";i:66;s:7:"1.9.8.1";i:67;s:5:"2.0.0";i:68;s:5:"2.0.2";i:69;s:5:"2.0.4";i:70;s:5:"2.1.0";i:71;s:5:"2.2.0";i:72;s:5:"2.2.2";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"704050";s:12:"activity_num";s:6:"256555";}}}}}i:2;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"39";s:10:"label_name";s:12:"注
册时间";s:9:"condition";a:2:{s:5:"field";s:12:"channel_date";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"2";s:4:"name";s:21:"2023/10/14-2023/10/24";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:5:"range";s:6:"values";a:2:{s:14:"greater_equals";s:8:"20231014";s:11:"less_equals";s:8:"20231024";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"232442";s:12:"activity_num";s:5:"74979";}}}}}}}

这个数据set进YAC后再次读取出来,最后一个字符从'}'变成了其他各种字符,如下:

样例1:
a:2:{s:17:"condition_version";s:1:"2";s:9:"condition";a:3:{i:0;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"38";s:10:"label_name";s:15:"A/Bæµ<8b>è¯<95>å<88><86>ç»<84>";s:9:"condition";a:2:{s:5:"field";s:12:"user_id_4mod";s:10:"level_list";a:2:{i:0;a:3:{s:5:"level";s:1:"2";s:4:"name";s:4:"Bç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"1";}}}}i:1;a:3:{s:5:"level";s:1:"4";s:4:"name";s:4:"Dç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"3";}}}}}}}i:1;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"16";s:10:"label_name";s:21:"å<89><94>é<99>¤åº<94>ç<94>¨ç<89><88>æ<9c>¬å<8f>·";s:9:"condition";a:2:{s:5:"field";s:7:"version";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"7";s:4:"name";s:11:"2.3.0以ä¸<8b>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:6:"not_in";s:6:"values";a:73:{i:0;s:5:"1.0.0";i:1;s:5:"1.0.2";i:2;s:5:"1.0.4";i:3;s:5:"1.0.6";i:4;s:5:"1.0.8";i:5;s:5:"1.1.0";i:6;s:5:"1.1.2";i:7;s:5:"1.1.4";i:8;s:5:"1.1.5";i:9;s:5:"1.1.6";i:10;s:5:"1.1.7";i:11;s:5:"1.1.8";i:12;s:5:"1.2.0";i:13;s:5:"1.2.1";i:14;s:7:"1.2.1.1";i:15;s:7:"1.2.1.2";i:16;s:5:"1.2.2";i:17;s:5:"1.2.3";i:18;s:5:"1.2.4";i:19;s:7:"1.2.4.1";i:20;s:5:"1.2.6";i:21;s:5:"1.2.8";i:22;s:7:"1.2.8.1";i:23;s:5:"1.3.0";i:24;s:7:"1.3.0.1";i:25;s:5:"1.3.2";i:26;s:5:"1.3.4";i:27;s:7:"1.3.4.1";i:28;s:5:"1.3.5";i:29;s:5:"1.3.6";i:30;s:5:"1.4.0";i:31;s:7:"1.4.0.1";i:32;s:5:"1.4.2";i:33;s:5:"1.4.4";i:34;s:5:"1.4.6";i:35;s:7:"1.4.6.1";i:36;s:7:"1.4.6.2";i:37;s:5:"1.4.7";i:38;s:5:"1.4.8";i:39;s:5:"1.5.0";i:40;s:7:"1.5.0.1";i:41;s:5:"1.5.4";i:42;s:7:"1.5.4.1";i:43;s:7:"1.5.4.2";i:44;s:5:"1.5.6";i:45;s:5:"1.5.8";i:46;s:5:"1.6.0";i:47;s:7:"1.6.0.1";i:48;s:5:"1.6.4";i:49;s:7:"1.6.4.1";i:50;s:7:"1.6.4.2";i:51;s:5:"1.6.6";i:52;s:5:"1.7.0";i:53;s:7:"1.7.0.1";i:54;s:7:"1.7.0.2";i:55;s:5:"1.7.2";i:56;s:5:"1.7.4";i:57;s:5:"1.7.8";i:58;s:5:"1.8.0";i:59;s:5:"1.8.4";i:60;s:5:"1.8.8";i:61;s:7:"1.8.8.1";i:62;s:5:"1.8.9";i:63;s:5:"1.9.0";i:64;s:5:"1.9.4";i:65;s:5:"1.9.8";i:66;s:7:"1.9.8.1";i:67;s:5:"2.0.0";i:68;s:5:"2.0.2";i:69;s:5:"2.0.4";i:70;s:5:"2.1.0";i:71;s:5:"2.2.0";i:72;s:5:"2.2.2";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"704050";s:12:"activity_num";s:6:"256555";}}}}}i:2;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"39";s:10:"label_name";s:12:"注å<86><8c>æ<97>¶é<97>´";s:9:"condition";a:2:{s:5:"field";s:12:"channel_date";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"2";s:4:"name";s:21:"2023/10/14-2023/10/24";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:5:"range";s:6:"values";a:2:{s:14:"greater_equals";s:8:"20231014";s:11:"less_equals";s:8:"20231024";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"232442";s:12:"activity_num";s:5:"74979";}}}}}}°

样例2:
a:2:{s:17:"condition_version";s:1:"2";s:9:"condition";a:3:{i:0;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"38";s:10:"label_name";s:15:"A/Bæµ<8b>è¯<95>å<88><86>ç»<84>";s:9:"condition";a:2:{s:5:"field";s:12:"user_id_4mod";s:10:"level_list";a:2:{i:0;a:3:{s:5:"level";s:1:"2";s:4:"name";s:4:"Bç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"1";}}}}i:1;a:3:{s:5:"level";s:1:"4";s:4:"name";s:4:"Dç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"3";}}}}}}}i:1;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"16";s:10:"label_name";s:21:"å<89><94>é<99>¤åº<94>ç<94>¨ç<89><88>æ<9c>¬å<8f>·";s:9:"condition";a:2:{s:5:"field";s:7:"version";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"7";s:4:"name";s:11:"2.3.0以ä¸<8b>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:6:"not_in";s:6:"values";a:73:{i:0;s:5:"1.0.0";i:1;s:5:"1.0.2";i:2;s:5:"1.0.4";i:3;s:5:"1.0.6";i:4;s:5:"1.0.8";i:5;s:5:"1.1.0";i:6;s:5:"1.1.2";i:7;s:5:"1.1.4";i:8;s:5:"1.1.5";i:9;s:5:"1.1.6";i:10;s:5:"1.1.7";i:11;s:5:"1.1.8";i:12;s:5:"1.2.0";i:13;s:5:"1.2.1";i:14;s:7:"1.2.1.1";i:15;s:7:"1.2.1.2";i:16;s:5:"1.2.2";i:17;s:5:"1.2.3";i:18;s:5:"1.2.4";i:19;s:7:"1.2.4.1";i:20;s:5:"1.2.6";i:21;s:5:"1.2.8";i:22;s:7:"1.2.8.1";i:23;s:5:"1.3.0";i:24;s:7:"1.3.0.1";i:25;s:5:"1.3.2";i:26;s:5:"1.3.4";i:27;s:7:"1.3.4.1";i:28;s:5:"1.3.5";i:29;s:5:"1.3.6";i:30;s:5:"1.4.0";i:31;s:7:"1.4.0.1";i:32;s:5:"1.4.2";i:33;s:5:"1.4.4";i:34;s:5:"1.4.6";i:35;s:7:"1.4.6.1";i:36;s:7:"1.4.6.2";i:37;s:5:"1.4.7";i:38;s:5:"1.4.8";i:39;s:5:"1.5.0";i:40;s:7:"1.5.0.1";i:41;s:5:"1.5.4";i:42;s:7:"1.5.4.1";i:43;s:7:"1.5.4.2";i:44;s:5:"1.5.6";i:45;s:5:"1.5.8";i:46;s:5:"1.6.0";i:47;s:7:"1.6.0.1";i:48;s:5:"1.6.4";i:49;s:7:"1.6.4.1";i:50;s:7:"1.6.4.2";i:51;s:5:"1.6.6";i:52;s:5:"1.7.0";i:53;s:7:"1.7.0.1";i:54;s:7:"1.7.0.2";i:55;s:5:"1.7.2";i:56;s:5:"1.7.4";i:57;s:5:"1.7.8";i:58;s:5:"1.8.0";i:59;s:5:"1.8.4";i:60;s:5:"1.8.8";i:61;s:7:"1.8.8.1";i:62;s:5:"1.8.9";i:63;s:5:"1.9.0";i:64;s:5:"1.9.4";i:65;s:5:"1.9.8";i:66;s:7:"1.9.8.1";i:67;s:5:"2.0.0";i:68;s:5:"2.0.2";i:69;s:5:"2.0.4";i:70;s:5:"2.1.0";i:71;s:5:"2.2.0";i:72;s:5:"2.2.2";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"704050";s:12:"activity_num";s:6:"256555";}}}}}i:2;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"39";s:10:"label_name";s:12:"注å<86><8c>æ<97>¶é<97>´";s:9:"condition";a:2:{s:5:"field";s:12:"channel_date";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"2";s:4:"name";s:21:"2023/10/14-2023/10/24";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:5:"range";s:6:"values";a:2:{s:14:"greater_equals";s:8:"20231014";s:11:"less_equals";s:8:"20231024";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"232442";s:12:"activity_num";s:5:"74979";}}}}}}£

样例3:
a:2:{s:17:"condition_version";s:1:"2";s:9:"condition";a:3:{i:0;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"38";s:10:"label_name";s:15:"A/Bæµ<8b>è¯<95>å<88><86>ç»<84>";s:9:"condition";a:2:{s:5:"field";s:12:"user_id_4mod";s:10:"level_list";a:2:{i:0;a:3:{s:5:"level";s:1:"2";s:4:"name";s:4:"Bç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"1";}}}}i:1;a:3:{s:5:"level";s:1:"4";s:4:"name";s:4:"Dç»<84>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:1:"=";s:6:"values";a:1:{i:0;s:1:"3";}}}}}}}i:1;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"16";s:10:"label_name";s:21:"å<89><94>é<99>¤åº<94>ç<94>¨ç<89><88>æ<9c>¬å<8f>·";s:9:"condition";a:2:{s:5:"field";s:7:"version";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"7";s:4:"name";s:11:"2.3.0以ä¸<8b>";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:6:"not_in";s:6:"values";a:73:{i:0;s:5:"1.0.0";i:1;s:5:"1.0.2";i:2;s:5:"1.0.4";i:3;s:5:"1.0.6";i:4;s:5:"1.0.8";i:5;s:5:"1.1.0";i:6;s:5:"1.1.2";i:7;s:5:"1.1.4";i:8;s:5:"1.1.5";i:9;s:5:"1.1.6";i:10;s:5:"1.1.7";i:11;s:5:"1.1.8";i:12;s:5:"1.2.0";i:13;s:5:"1.2.1";i:14;s:7:"1.2.1.1";i:15;s:7:"1.2.1.2";i:16;s:5:"1.2.2";i:17;s:5:"1.2.3";i:18;s:5:"1.2.4";i:19;s:7:"1.2.4.1";i:20;s:5:"1.2.6";i:21;s:5:"1.2.8";i:22;s:7:"1.2.8.1";i:23;s:5:"1.3.0";i:24;s:7:"1.3.0.1";i:25;s:5:"1.3.2";i:26;s:5:"1.3.4";i:27;s:7:"1.3.4.1";i:28;s:5:"1.3.5";i:29;s:5:"1.3.6";i:30;s:5:"1.4.0";i:31;s:7:"1.4.0.1";i:32;s:5:"1.4.2";i:33;s:5:"1.4.4";i:34;s:5:"1.4.6";i:35;s:7:"1.4.6.1";i:36;s:7:"1.4.6.2";i:37;s:5:"1.4.7";i:38;s:5:"1.4.8";i:39;s:5:"1.5.0";i:40;s:7:"1.5.0.1";i:41;s:5:"1.5.4";i:42;s:7:"1.5.4.1";i:43;s:7:"1.5.4.2";i:44;s:5:"1.5.6";i:45;s:5:"1.5.8";i:46;s:5:"1.6.0";i:47;s:7:"1.6.0.1";i:48;s:5:"1.6.4";i:49;s:7:"1.6.4.1";i:50;s:7:"1.6.4.2";i:51;s:5:"1.6.6";i:52;s:5:"1.7.0";i:53;s:7:"1.7.0.1";i:54;s:7:"1.7.0.2";i:55;s:5:"1.7.2";i:56;s:5:"1.7.4";i:57;s:5:"1.7.8";i:58;s:5:"1.8.0";i:59;s:5:"1.8.4";i:60;s:5:"1.8.8";i:61;s:7:"1.8.8.1";i:62;s:5:"1.8.9";i:63;s:5:"1.9.0";i:64;s:5:"1.9.4";i:65;s:5:"1.9.8";i:66;s:7:"1.9.8.1";i:67;s:5:"2.0.0";i:68;s:5:"2.0.2";i:69;s:5:"2.0.4";i:70;s:5:"2.1.0";i:71;s:5:"2.2.0";i:72;s:5:"2.2.2";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"704050";s:12:"activity_num";s:6:"256555";}}}}}i:2;a:4:{s:4:"rule";s:1:"1";s:8:"label_id";s:2:"39";s:10:"label_name";s:12:"注å<86><8c>æ<97>¶é<97>´";s:9:"condition";a:2:{s:5:"field";s:12:"channel_date";s:10:"level_list";a:1:{i:0;a:4:{s:5:"level";s:1:"2";s:4:"name";s:21:"2023/10/14-2023/10/24";s:9:"condition";a:1:{i:0;a:2:{s:8:"operator";s:5:"range";s:6:"values";a:2:{s:14:"greater_equals";s:8:"20231014";s:11:"less_equals";s:8:"20231024";}}}s:3:"rpt";a:2:{s:3:"num";s:6:"232442";s:12:"activity_num";s:5:"74979";}}}}}}<9f>

@adele-php
Copy link
Author

adele-php commented Oct 25, 2023

由于yac->set支持所有的php类型,set serialize($data)改为set $data后没有报错

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant