18 ctx = redisConnect(server_ip.c_str(), port);
21 throw HiredisException(
"HiredisAdapter::connect(): Couldn't allocate redis context");
25 throw HiredisException(std::string(
"HiredisAdapter::connect(): Error: ") + ctx->errstr);
41 redisReply* reply = generic_set(
"SET", key, value);
42 expire(key, expire_timeout);
50 redisReply* reply = generic_set(
"SADD", key, value);
51 expire(key, expire_timeout);
64 void* reply = redisCommand(ctx,
"EXPIRE %s %lld", key.c_str(),
expire);
66 last_expire_failed = (reply ==
nullptr);
67 freeReplyObject(reply);
72 redisReply* reply = generic_read(
"GET", key);
79 redisReply* reply = generic_read(
"SMEMBERS", key);
84inline redisReply* HiredisAdapter::generic_set(
const std::string& command,
const std::string& key,
85 const std::string& value)
89 void* raw_reply = redisCommand(ctx, (command +
" %s %s").c_str(), key.c_str(), value.c_str());
90 assert_valid_redis_reply(raw_reply, command);
92 return static_cast<redisReply*
>(raw_reply);
95inline redisReply* HiredisAdapter::generic_read(
const std::string& command,
const std::string& key)
99 void* raw_reply = redisCommand(ctx, (command +
" %s").c_str(), key.c_str());
100 assert_valid_redis_reply(raw_reply, command);
102 return static_cast<redisReply*
>(raw_reply);
105inline void HiredisAdapter::assert_connected()
const
108 throw HiredisException(
"HiredisAdapter::assert_connected(): Not connected");
112inline void HiredisAdapter::assert_valid_redis_reply(
const void* reply,
const std::string& command)
114 if (reply !=
nullptr) {
118 std::string errstr = ctx->errstr;
120 throw HiredisException(
"HiredisAdapter::assert_valid_redis_reply(): " + command
121 +
" failed due to error: " + errstr);
virtual void disconnect()
virtual void expire(const std::string &key, timeout_t expire)
virtual sadd_reply_t sadd(const std::string &key, const std::string &value, const timeout_t expire=0)
virtual ~HiredisAdapter()
virtual smembers_reply_t smembers(const std::string &key)
set_reply_t smembers_reply_t
virtual void connect()
Connect to the Redis server.
virtual get_reply_t get(const std::string &key)
virtual set_reply_t set(const std::string &key, const std::string &value, const timeout_t expire=0)
virtual bool is_connected() const noexcept
std::unique_ptr< redisReply, std::function< void(redisReply *)> > set_reply_t
A problem has occured whilst interacting with Redis.