+int getKeyType(RedisModuleCtx *ctx, RedisModuleString *key_str)
+{
+ RedisModuleKey *key = RedisModule_OpenKey(ctx, key_str, REDISMODULE_READ);
+ int type = RedisModule_KeyType(key);
+ RedisModule_CloseKey(key);
+ return type;
+}
+
+bool replyContentsEqualString(RedisModuleCallReply *reply, RedisModuleString *expected_value)
+{
+ size_t replylen = 0, expectedlen = 0;
+ const char *expectedval = RedisModule_StringPtrLen(expected_value, &expectedlen);
+ const char *replyval = RedisModule_CallReplyStringPtr(reply, &replylen);
+ return replyval &&
+ expectedlen == replylen &&
+ !strncmp(expectedval, replyval, replylen);
+}
+
+typedef struct _SetParams {
+ RedisModuleString **key_val_pairs;
+ size_t length;
+} SetParams;
+
+typedef struct _PubParams {
+ RedisModuleString **channel_msg_pairs;
+ size_t length;
+} PubParams;
+
+void multiPubCommand(RedisModuleCtx *ctx, PubParams* pubParams)
+{
+ RedisModuleCallReply *reply = NULL;
+ for (unsigned int i = 0 ; i < pubParams->length ; i += 2) {
+ reply = RedisModule_Call(ctx, "PUBLISH", "v", pubParams->channel_msg_pairs + i, 2);
+ RedisModule_FreeCallReply(reply);
+ }
+}