+#if HAVE_HIREDIS
+ if (r->connection->redis_c &&
+ !diag && npr->which == Z_NamePlusRecord_databaseRecord)
+ {
+ WRBUF k = wrbuf_alloc();
+ WRBUF rec_sha1 = wrbuf_alloc();
+ ODR odr = odr_createmem(ODR_ENCODE);
+ char *rec_buf;
+ int rec_len;
+ const char *argv[3];
+ size_t argvlen[3];
+ redisReply *reply;
+
+ z_NamePlusRecord(odr, &npr, 0, 0);
+ rec_buf = odr_getbuf(odr, &rec_len, 0);
+
+ wrbuf_write(k, wrbuf_buf(r->mc_key), wrbuf_len(r->mc_key));
+ wrbuf_printf(k, ";%d;%s;%s;%s", pos,
+ syntax ? syntax : "",
+ elementSetName ? elementSetName : "",
+ schema ? schema : "");
+
+ wrbuf_sha1_write(rec_sha1, rec_buf, rec_len, 1);
+
+ argv[0] = "SET";
+ argvlen[0] = 3;
+ argv[1] = wrbuf_buf(k);
+ argvlen[1] = wrbuf_len(k);
+ argv[2] = wrbuf_buf(rec_sha1);
+ argvlen[2] = wrbuf_len(rec_sha1);
+
+ reply = redisCommandArgv(r->connection->redis_c, 3, argv, argvlen);
+ yaz_log(YLOG_LOG, "Store record key=%s val=%s",
+ wrbuf_cstr(k), wrbuf_cstr(rec_sha1));
+ freeReplyObject(reply);
+
+ argv[1] = wrbuf_buf(rec_sha1);
+ argvlen[1] = wrbuf_len(rec_sha1);
+ argv[2] = rec_buf;
+ argvlen[2] = rec_len;
+
+ reply = redisCommandArgv(r->connection->redis_c, 3, argv, argvlen);
+ yaz_log(YLOG_LOG, "Add record key=%s rec_len=%d",
+ wrbuf_cstr(rec_sha1), rec_len);
+ freeReplyObject(reply);
+
+ odr_destroy(odr);
+ wrbuf_destroy(k);
+ wrbuf_destroy(rec_sha1);
+ }
+#endif
+#if HAVE_LIBMEMCACHED