本文整理汇总了C++中acl::redis_zset::get_pool方法的典型用法代码示例。如果您正苦于以下问题:C++ redis_zset::get_pool方法的具体用法?C++ redis_zset::get_pool怎么用?C++ redis_zset::get_pool使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类acl::redis_zset
的用法示例。
在下文中一共展示了redis_zset::get_pool方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_zadd
static bool test_zadd(acl::redis_zset& redis, int i, const char* key,
const char* big_data, size_t length, size_t base_length)
{
// 将大数据进行分割,计算出分割后的数据块个数
size_t nmember = length / base_length;
if (length % base_length != 0)
nmember++;
// 从连接对象中获得统一的内存池分配对象,分配小内存块
acl::dbuf_pool* pool = redis.get_pool();
// 动态分配数据块指针数组内存
const char** members = (const char**)
pool->dbuf_alloc(nmember * sizeof(char*));
// 动态分配数据块长度数组内存
size_t* lens = (size_t*) pool->dbuf_alloc(nmember * sizeof(size_t));
// 动态分配数据块分值数组内存
double* scores = (double*) pool->dbuf_alloc(nmember * sizeof(double));
// 将大数据切分成小数据,置入数据块数组中,使用递增的整数做为分值
size_t len;
const char* ptr = big_data;
char* buf, id[64];
int n;
for (size_t j = 0; j < nmember; j++)
{
len = length > base_length ? base_length : length;
// 在每个原始数据前面加唯一前缀,从而可以保证有序集合中对象中
// 的每个成员数据都是不同的
n = acl::safe_snprintf(id, sizeof(id),
"%lu:", (unsigned long) j);
buf = (char*) pool->dbuf_alloc(len + n);
memcpy(buf, id, n);
memcpy(buf + n, ptr, len);
members[j] = buf;
lens[j] = len + n; // 该数据块的总长度:唯一前缀+数据
scores[j] = (double) j;
// 剩余数据块长度
length -= len;
ptr += len;
}
// 要求 redis 连接对象采用内存链协议组装方式,避免内部组装请求协议时
// 再组装成大内存
redis.get_client()->set_slice_request(true);
// 开始向 redis 添加数据
int ret = redis.zadd(key, members, lens, scores, nmember);
if (ret < 0)
{
printf("add key: %s error\r\n", key);
return false;
}
else if (i < 10)
printf("add ok, key: %s, ret: %d\r\n", key, ret);
return true;
}