redis zadd添加进去的值为什么被序列化

通过php代码去弄 总是会被序列化

127.0.0.1:6379> ZRANGE key  0 -1 WITHSCORES
1) "i:1;"
2) "1"
3) "s:6:\"google\";"
4) "1"
5) "i:4;"
6) "2"
7) "s:4:\"i:1;\";"
8) "2"
127.0.0.1:6379> ZRANGE key  0 -1 WITHSCORES

但是 我在cli下 可以直接添加正常. 这是为什么?

127.0.0.1:6379> zadd key 1 google
(integer) 1
127.0.0.1:6379> ZRANGE key  0 -1 WITHSCORES
 1) "google"
 2) "1"
 3) "i:1;"
 4) "1"
 5) "s:6:\"google\";"
 6) "1"
 7) "i:4;"
 8) "2"
 9) "s:4:\"i:1;\";"
10) "2"
127.0.0.1:6379> 
阅读 3.2k
2 个回答

因为redis kv模式只能存字符串呀,PHP 的数组怎么变为字符串呢,默认就是序列化,取的时候反序列化
大多数情况下,我们都是手动转为 JSON 字符串再存进 redis 里面的,这样其他程序读取的时候会比较方便

======== 更新 ========

phpredis扩展的序列化参数有三个值,分别是

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE);    // don't serialize data
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);    // use built-in serialize/unserialize
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);    // use igBinary serialize/unserialize

使用 $redis->getOption(Redis::OPT_SERIALIZER); 方法看看配置了哪一个

找到问题了 这样就解决了 关闭序列化

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE);   // don't serialize data

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);    // use built-in serialize/unserialize

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);   // use igBinary serialize/unserialize

$redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); // use custom prefix on all keys
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题