что такое diff b / w pset и psetx в php redis? Возможно ли установить массив в качестве значения вместе с ним? - PullRequest
1 голос
/ 18 февраля 2020
$redisClient -> setex('key', 3600, 'value' );

и

$redisClient -> psetex('key', 3600, 'value' );

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

psetex является точным setex, что означает, что единицы для TTL указаны в миллисекундах, а не в секундах. См. https://redis.io/commands/psetex

В качестве значения вы можете установить любую бинарно-безопасную строку. Вы можете хранить массив, сериализованный в предпочитаемом вами формате, например JSON или CSV, но при каждой операции, которую вы выполняете над массивом, вы должны полностью прочитать и записать обратно.

Рассмотрите другие типы данных в Redis: списки, наборы, отсортированные наборы, га sh (карты). Скорее всего, другой тип данных лучше подходит для ваших требований. См. https://redis.io/topics/data-types

Вы всегда можете установить срок действия для любого типа ключа, используя EXPIRE или PEXPIRE.

1 голос
/ 18 февраля 2020

https://redis.io/commands/set против https://redis.io/commands/setex

и да, сериализуйте данные с помощью serialize или jasn_encode.

0 голосов
/ 05 марта 2020

Как уже описывали другие, SETEX принимает TTL в секундах, а PSETEX принимает его в миллисекундах.

Вы можете PhpRedis обработать сериализацию для вас, хотя:

$obj_r = new Redis();
$obj_r->connect('localhost', 6379);

$obj_r->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
$obj_r->set('serialized', ['this', 'is', 'an', ['array', 'of', 'values']]);

var_dump($obj_r->get('serialized'));

Примеры setOption в документах

...