初学Redis(2)――用Redis作为Mysql数据库的缓存(二)

2015-07-24 11:12:32 · 作者: · 浏览: 9
t num_col = meta->getColumnCount(); // 将结果集中所有行对应的所有HASH键存入该SET,SET键包含了结果集的标识符 string redis_row_set_key("resultset.hash:" + resultset_id); redisReply *reply; string ttlstr; stringstream ttlstream; ttlstream << ttl; ttlstr = ttlstream.str(); // 结果集中的每一行对应于一个HASH,将结果集的所有行都存入相应HASH中 resultset->beforeFirst(); while (resultset->next()) { string redis_row_key; // HASH键名,由前缀和HASH编号组成 stringstream keystream; keystream << prefix << num_row; redis_row_key = keystream.str(); for (int i = 1; i <= num_col; ++i) { string col_label = meta->getColumnLabel(i); string col_value = resultset->getString(col_label); // 将结果集中一行的字段名和对应值存入HASH reply = static_cast(redisCommand(redis_connection, "HSET %s %s %s", redis_row_key.c_str(), col_label.c_str(), col_value.c_str())); freeReplyObject(reply); } // 将HASH键加入SET中 reply = static_cast
(redisCommand(redis_connection, "SADD %s %s", redis_row_set_key.c_str(), redis_row_key.c_str())); freeReplyObject(reply); // 设置HASH的过期时间 reply = static_cast(redisCommand(redis_connection, "EXPIRE %s %s", redis_row_key.c_str(), ttlstr.c_str())); freeReplyObject(reply); ++num_row; } // 设置SET的过期时间 reply = static_cast(redisCommand(redis_connection, "EXPIRE %s %s", redis_row_set_key.c_str(), ttlstr.c_str())); freeReplyObject(reply); return redis_row_set_key; // 返回SET键,以便于其他函数获取该SET中的内容 }

至此,我们已经给出了两种存储Mysql结果集的方案,这就是我们在篇首提出的第一个问题,即选择何种数据结构存储Mysql结果集的答案。下一篇文章将研究第二个问题,即数据结构键的标识符选择问题。