因为我们在很多项目中使用了1setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
使用了 SERIALIZER_PHP 参数后,将会使用 serialize 函数序列化后保存到 Redis 中,于是我在使用 Sorted Sets 的时候遇到一个问题。
比如调用 zAdd 的时候,实际存储在数据库中的数据会根据类型序列化123zAdd('myzset', 1, 100);zAdd('myzset', 2, 101);zAdd('myzset', 3, "100");
会造成 100 和 “100” 实际上是两个 member,效果如1234561) "i:100;"2) "1"3) "i:101;"4) "2"5) "s:3:\"100\";"6) "3"
但是在在使用 zRange 读取数据的时候,由于反序列后的 member 是被当成同一个 key 的,所以只会读取其中一个 member,按照排序先后,后面一个的 score 会覆盖前面的 score,如12[100] => 3[101] => 2
所以就会造成排序混乱问题