【发布时间】:2020-02-18 17:35:06
【问题描述】:
$redisClient -> setex('key', 3600, 'value' );
和
$redisClient -> psetex('key', 3600, 'value' );
【问题讨论】:
$redisClient -> setex('key', 3600, 'value' );
和
$redisClient -> psetex('key', 3600, 'value' );
【问题讨论】:
https://redis.io/commands/set 与 https://redis.io/commands/setex
是的,使用 serialize 或 jasn_encode 序列化数据。
【讨论】:
psetex 是精确的setex,这意味着 TTL 的单位是毫秒,而不是秒。见https://redis.io/commands/psetex
作为值,您可以设置任何二进制安全字符串。您可以存储以您喜欢的格式(如 JSON 或 CSV)序列化的数组,但您对数组执行的每项操作都必须完整读取并完整写回。
考虑 Redis 中的其他数据类型:列表、集合、排序集、哈希(映射)。有可能另一种数据类型更适合您的要求。见https://redis.io/topics/data-types
您始终可以使用EXPIRE 或PEXPIRE 为任何类型的密钥设置过期时间。
【讨论】:
正如其他人所描述的,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'));
【讨论】: