Баги в библиотеке memcached (getMulti)
Долго боролись с багом при использовании Memcached::getMulti в php 5.3.8.
Как это было:
Сначала данные складываются в кэш под некоторыми ключами, потом происходит считывание
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$cached = cache->getMulti( $cacheKeys ); foreach ( $actions as &$action ) { $actionCacheKey = self::getCacheKey( $action ); if ( array_key_exists( $actionCacheKey, $cached ) ) { $action = $cached[$actionCacheKey]; } else if ( in_array( $actionCacheKey, array_keys( $cached ) ) ) { die( '!!' ); } else { $action = self::factory( $action ); } } |
Так вот, if ( array_key_exists( $actionCacheKey, $cached ) ) не отрабатывает никогда (равно как isset и ! empty).
При этом условие else if ( in_array( $actionCacheKey, array_keys( $cached ) ) ) всегда истинно.
При этом опытным путём было выяснено, что некоторые префиксы ключей «работают как надо», но есть зависимость работы как надо от сервера.
В общем долго промучались.
В итоге, как и подозревали, проблема оказалась в библиотеке Memcached (при использовании бинарного протокола setOption( Memcached::OPT_BINARY_PROTOCOL, true );) и даже заведена бага:
https://bugs.php.net/bug.php?id=59990
Similar Posts
- None Found
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.