首页 > 解决方案 > POCO-Liberaries:: Poco Key expiry time not working in set 方法

问题描述

我正在使用使用 set 命令存储键值对的 Poco Redis 数据库。我的要求是在 7 天后自动删除该条目。

我正在使用 poco redis set 命令来实现该功能。

下面是 set 命令的签名:-

Command Command::set(const std::string& key, const std::string& value, bool overwrite, const Poco::Timespan& expireTime, bool create)

我遵循以下程序:-

  1. 首先我连接到redis数据库。

  2. 成功连接后,我正在创建具有 60 秒值的时间跨度对象,并将键、值和时间跨度值传递给设置方法。

时间跨度 ts(60,0);

命令 setCommand = Command::set(str_metadatakey, str_metadatavalue,true,ts,true); std::string 结果 = m_oRedisClient.execute(setCommand);

但是当我执行上面的代码时,它会抛出异常。

标签: poco-libraries

解决方案


面临同样的问题。例外是“ERR 协议错误:预期 '$',得到 ':'” - 因为 redis 预期“过期”是字符串。

作为一种解决方法,您可以将 expire 显式指定为字符串:

Command setCommand = Command::set(key, value);
setCommand  << "EX" << "1500"

推荐阅读