Example #1
0
int redis_zset::zadd(const char* key, const char* members[],
	size_t members_len[], double scores[], size_t size)
{
	size_t argc = 2 + size * 2;
	const char** argv = (const char**)
		dbuf_->dbuf_alloc(argc * sizeof(char*));
	size_t* lens = (size_t*) dbuf_->dbuf_alloc(argc * sizeof(size_t));

	argv[0] = "ZADD";
	lens[0] = sizeof("ZADD") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	size_t j = 2;
	char* buf;
	int len;

	for (size_t i = 0; i < size; i++)
	{
		buf = (char*) dbuf_->dbuf_alloc(BUFLEN);
		len = safe_snprintf(buf, BUFLEN, "%.8f", scores[i]);
		argv[j] = buf;
		lens[j] = len;
		j++;

		argv[j] = members[i];
		lens[j] = members_len[i];
		j++;
	}

	hash_slot(key);
	build_request(argc, argv, lens);
	return get_number();
}
Example #2
0
bool redis_string::incoper(const char* cmd, const char* key, long long int* n,
	long long int* result)
{
	size_t argc = 2;
	const char* argv[3];
	size_t lens[3];

	argv[0] = cmd;
	lens[0] = strlen(cmd);

	argv[1] = key;
	lens[1] = strlen(key);

	char buf[INT64_LEN];
	if (n != NULL)
	{
		(void) acl_i64toa(*n, buf, sizeof(buf));
		argv[2] = buf;
		lens[2] = strlen(buf);
		argc++;
	}

	hash_slot(key);
	build_request(argc, argv, lens);

	bool success;
	if (result != NULL)
		*result = get_number64(&success);
	else
		(void) get_number64(&success);
	return success;
}
Example #3
0
int redis_list::rpush(const char* key, const char* values[],
	const size_t lens[], size_t argc)
{
	hash_slot(key);
	build("RPUSH", key, values, lens, argc);
	return get_number();
}
Example #4
0
int redis_string::bitcount(const char* key, size_t len, int start, int end)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = "BITCOUNT";
	lens[0] = sizeof("BITCOUNT") - 1;

	argv[1] = key;
	lens[1] = len;

	char buf4start[INT_LEN];
	(void) safe_snprintf(buf4start, sizeof(buf4start), "%d", start);
	argv[2] = buf4start;
	lens[2] = strlen(buf4start);

	char buf4end[INT_LEN];
	(void) safe_snprintf(buf4end, sizeof(buf4end), "%d", end);
	argv[3] = buf4end;
	lens[3] = strlen(buf4end);

	hash_slot(key, len);
	build_request(4, argv, lens);
	return get_number();
}
Example #5
0
bool redis_string::incrbyfloat(const char* key, double inc,
	double* result /* = NULL */)
{
	const char* argv[3];
	size_t lens[3];

	argv[0] = "INCRBYFLOAT";
	lens[0] = sizeof("INCRBYFLOAT") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char buf[FLOAT_LEN];
	(void) safe_snprintf(buf, sizeof(buf), "%f", inc);
	argv[2] = buf;
	lens[2] = strlen(buf);

	hash_slot(key);
	build_request(3, argv, lens);
	if (get_string(buf, sizeof(buf)) == false)
		return false;

	if (result != NULL)
		*result = atof(buf);
	return true;
}
Example #6
0
bool redis_string::getrange(const char* key, size_t key_len,
	int start, int end, string& buf)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = "GETRANGE";
	lens[0] = sizeof("GETRANGE") - 1;

	argv[1] = key;
	lens[1] = key_len;

	char start_buf[INT_LEN], end_buf[INT_LEN];
	(void) safe_snprintf(start_buf, sizeof(start_buf), "%d", start);
	argv[2] = start_buf;
	lens[2] = strlen(start_buf);

	(void) safe_snprintf(end_buf, sizeof(end_buf), "%d", end);
	argv[3] = end_buf;
	lens[3] = strlen(end_buf);

	hash_slot(key, key_len);
	build_request(4, argv, lens);
	return get_string(buf) >= 0 ? true : false;
}
Example #7
0
bool redis_string::getbit(const char* key, size_t len,
	unsigned offset, int& bit)
{
	const char* argv[3];
	size_t lens[3];

	argv[0] = "GETBIT";
	lens[0] = sizeof("GETBIT") - 1;

	argv[1] = key;
	lens[1] = len;

	char buf4off[INT_LEN];
	(void) safe_snprintf(buf4off, sizeof(buf4off), "%d", offset);
	argv[2] = buf4off;
	lens[2] = strlen(buf4off);

	hash_slot(key, len);
	build_request(3, argv, lens);
	int ret = get_number();
	if (ret < 0)
		return false;
	bit = ret == 0 ? 0 : 1;
	return true;
}
Example #8
0
int redis_zset::zremrangebyrank(const char* key, int start, int stop)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = "ZREMRANGEBYRANK";
	lens[0] = sizeof("ZREMRANGEBYRANK") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char start_s[INTLEN], stop_s[INTLEN];
	safe_snprintf(start_s, sizeof(start_s), "%d", start);
	safe_snprintf(stop_s, sizeof(stop_s), "%d", stop);

	argv[2] = start_s;
	lens[2] = strlen(start_s);

	argv[3] = stop_s;
	lens[3] = strlen(stop_s);

	hash_slot(key);
	build_request(4, argv, lens);
	return get_number();
}
Example #9
0
bool redis_zset::zscore(const char* key, const char* member, size_t len,
	double& result)
{
	const char* argv[3];
	size_t lens[3];

	argv[0] = "ZSCORE";
	lens[0] = sizeof("ZSCORE") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	argv[2] = member;
	lens[2] = len;

	hash_slot(key);
	build_request(3, argv, lens);

	char buf[BUFLEN];
	int ret = get_string(buf, sizeof(buf));
	if (ret <= 0)
		return false;
	result = atof(buf);
	return true;
}
Example #10
0
int redis_zset::zadd(const char* key,
	const std::vector<std::pair<string, double> >&members)
{
	size_t argc = 2 + members.size() * 2;
	const char** argv = (const char**)
		dbuf_->dbuf_alloc(argc * sizeof(char*));
	size_t* lens = (size_t*) dbuf_->dbuf_alloc(argc * sizeof(size_t));

	argv[0] = "ZADD";
	lens[0] = sizeof("ZADD") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char* buf;
	size_t i = 2;
	std::vector<std::pair<string, double> >::const_iterator cit;
	for (cit = members.begin(); cit != members.end(); ++cit)
	{
		buf = (char*) dbuf_->dbuf_alloc(BUFLEN);
		safe_snprintf(buf, BUFLEN, "%.8f", (*cit).second);
		argv[i] = buf;
		lens[i] = strlen(buf);
		i++;

		argv[i] = (*cit).first.c_str();
		lens[i] = (*cit).first.length();
		i++;
	}

	hash_slot(key);
	build_request(argc, argv, lens);
	return get_number();
}
Example #11
0
int redis_zset::zrem(const char* key, const char* members[],
	const size_t lens[], size_t argc)
{
	hash_slot(key);
	build("ZREM", key, members, lens, argc);
	return get_number();
}
Example #12
0
int redis_zset::zrange_get(const char* cmd, const char* key, int start,
	int stop, std::vector<string>* result)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = cmd;
	lens[0] = strlen(cmd);

	argv[1] = key;
	lens[1] = strlen(key);

	char start_s[INTLEN], stop_s[INTLEN];
	safe_snprintf(start_s, sizeof(start_s), "%d", start);
	safe_snprintf(stop_s, sizeof(stop_s), "%d", stop);

	argv[2] = start_s;
	lens[2] = strlen(start_s);

	argv[3] = stop_s;
	lens[3] = strlen(stop_s);

	hash_slot(key);
	build_request(4, argv, lens);
	return get_strings(result);
}
Example #13
0
bool redis_zset::zincrby(const char* key, double inc,
	const char* member, size_t len, double* result /* = NULL */)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = "ZINCRBY";
	lens[0] = sizeof("ZINCRBY") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char score[BUFLEN];
	safe_snprintf(score, sizeof(score), "%.8f", inc);
	argv[2] = score;
	lens[2] = strlen(score);

	argv[3] = member;
	lens[3] = len;

	hash_slot(key);
	build_request(4, argv, lens);
	int ret = get_string(score, sizeof(score));
	if (ret <= 0)
		return false;
	if (result)
		*result = atof(score);
	return true;
}
Example #14
0
int redis_zset::zcount(const char* key, double min, double max)
{
	const char* argv[4];
	size_t lens[4];

	argv[0] = "ZCOUNT";
	lens[0] = sizeof("ZCOUNT") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char min_buf[BUFLEN], max_buf[BUFLEN];
	safe_snprintf(min_buf, sizeof(min_buf), "%.8f", min);
	safe_snprintf(max_buf, sizeof(max_buf), "%.8f", max);

	argv[2] = min_buf;
	lens[2] = strlen(min_buf);

	argv[3] = max_buf;
	lens[3] = strlen(max_buf);

	hash_slot(key);
	build_request(4, argv, lens);
	return get_number();
}
Example #15
0
int redis_key::del_keys(const char* keys[], const size_t lens[], size_t argc)
{
	if (argc == 1)
		hash_slot(keys[0], lens[0]);
	build("DEL", NULL, keys, lens, argc);
	return get_number();
}
Example #16
0
bool redis_hash::hmget(const char* key, const char* names[],
	const size_t lens[], size_t argc, std::vector<string>* result /* = NULL */)
{
	hash_slot(key);
	build("HMGET", key, names, lens, argc);
	return get_strings(result) >= 0 ? true : false;
}
Example #17
0
int redis_zset::zrangebylex(const char* key, const char* min, const char* max,
	std::vector<string>* out, const int* offset /* = NULL */,
	const int* count /* = NULL */)
{
	const char* argv[7];
	size_t lens[7];
	size_t argc = 4;

	argv[0] = "ZRANGEBYLEX";
	lens[0] = sizeof("ZRANGEBYLEX") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	argv[2] = min;
	lens[2] = strlen(min);

	argv[3] = max;
	lens[3] = strlen(max);

	if (offset != NULL && count != NULL)
	{
		argv[4] = min;
		lens[4] = strlen(min);
		argc++;

		argv[5] = max;
		lens[5] = strlen(max);
		argc++;
	}

	hash_slot(key);
	build_request(argc, argv, lens);
	return get_strings(out);
}
Example #18
0
bool redis_hash::hmget(const char* key, const std::vector<const char*>& names,
	std::vector<string>* result /* = NULL */)
{
	hash_slot(key);
	build("HMGET", key, names);
	return get_strings(result) >= 0 ? true : false;
}
Example #19
0
int redis_hash::hdel(const char* key, const char* names[],
	const size_t names_len[], size_t argc)
{
	hash_slot(key);
	build("HDEL", key, names, names_len, argc);
	return get_number();;
}
Example #20
0
int redis_key::del_keys(const std::vector<string>& keys)
{
	if (keys.size() == 1)
		hash_slot(keys[0].c_str());
	build("DEL", NULL, keys);
	return get_number();
}
Example #21
0
redis_key_t redis_key::type(const char* key)
{
	const char* argv[2];
	size_t lens[2];

	argv[0] = "TYPE";
	lens[0] = sizeof("TYPE") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	hash_slot(key);
	build_request(2, argv, lens);
	const char* ptr = get_status();

	if (ptr == NULL || *ptr == 0 || strcasecmp(ptr, "none") == 0)
		return REDIS_KEY_NONE;
	else if (strcasecmp(ptr, "string") == 0)
		return REDIS_KEY_STRING;
	else if (strcasecmp(ptr, "hash") == 0)
		return REDIS_KEY_HASH;
	else if (strcasecmp(ptr, "list") == 0)
		return REDIS_KEY_LIST;
	else if (strcasecmp(ptr, "set") == 0)
		return REDIS_KEY_SET;
	else if (strcasecmp(ptr, "zset") == 0)
		return REDIS_KEY_ZSET;
	else
	{
		logger_error("unknown type: %s, key: %s", ptr, key);
		return REDIS_KEY_NONE;
	}
}
Example #22
0
bool redis_key::restore(const char* key, const char* value, size_t len,
	int nttl, bool replace /* = false */)
{
	const char* argv[5];
	size_t lens[5];

	argv[0] = "RESTORE";
	lens[0] = sizeof("RESTORE") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	char ttl_s[INT_LEN];
	safe_snprintf(ttl_s, sizeof(ttl_s), "%d", nttl);
	argv[2] = ttl_s;
	lens[2] = strlen(ttl_s);

	argv[3] = value;
	lens[3] = len;

	size_t argc = 4;
	if (replace)
	{
		argv[4] = "REPLACE";
		lens[4] = sizeof("REPLACE") - 1;
		argc++;
	}

	hash_slot(key);
	build_request(argc, argv, lens);
	return check_status();
}
Example #23
0
int redis_hash::hlen(const char* key)
{
	const char* keys[1];
	keys[0] = key;

	hash_slot(key);
	build("HLEN", NULL, keys, 1);
	return get_number();
}
Example #24
0
bool redis_hash::hkeys(const char* key, std::vector<string>& names)
{
	const char* keys[1];
	keys[0] = key;

	hash_slot(key);
	build("HKEYS", NULL, keys, 1);
	return get_strings(names) < 0 ? false : true;
}
Example #25
0
bool redis_hash::hgetall(const char* key, std::map<string, string>& result)
{
	const char* keys[1];
	keys[0] = key;

	hash_slot(key);
	build("HGETALL", NULL, keys, 1);
	return get_strings(result) < 0 ? false : true;
}
Example #26
0
bool redis_hash::hgetall(const char* key, std::vector<const char*>& names,
	std::vector<const char*>& values)
{
	const char* keys[1];
	keys[0] = key;

	hash_slot(key);
	build("HGETALL", NULL, keys, 1);
	return get_strings(names, values) < 0 ? false : true;
}
Example #27
0
bool redis_hash::hexists(const char* key, const char* name, size_t name_len)
{
	const char* names[1];
	names[0] = name;
	size_t names_len[1];
	names_len[0] = name_len;

	hash_slot(key);
	build("HEXISTS", key, names, names_len, 1);
	return get_number() < 0 ? false : true;
}
Example #28
0
int redis_list::llen(const char* key)
{
	const char* argv[2];
	size_t lens[2];

	argv[0] = "LLEN";
	lens[0] = sizeof("LLEN") - 1;
	argv[1] = key;
	lens[1] = strlen(key);

	hash_slot(key);
	build_request(2, argv, lens);
	return get_number();
}
Example #29
0
int redis_key::del_one(const char* key, size_t len)
{
	const char* argv[2];
	size_t lens[2];

	argv[0] = "DEL";
	lens[0] = sizeof("DEL") - 1;

	argv[1] = key;
	lens[1] = len;

	hash_slot(key);
	build_request(2, argv, lens);
	return get_number();
}
Example #30
0
int redis_key::persist(const char* key)
{
	const char* argv[2];
	size_t lens[2];

	argv[0] = "PERSIST";
	lens[0] = sizeof("PERSIST") - 1;

	argv[1] = key;
	lens[1] = strlen(key);

	hash_slot(key);
	build_request(2, argv, lens);
	return get_number();
}