Exemplo n.º 1
0
int SSDB::zset(const Bytes &name, const Bytes &key, const Bytes &score) const{
	if(name.size() > SSDB_KEY_LEN_MAX || key.size() > SSDB_KEY_LEN_MAX){
		return -1;
	}

	std::string old_score;
	if(this->zget(name, key, &old_score) == -1 || old_score != score){
		leveldb::Status s;
		leveldb::WriteBatch batch;
		std::string k0, k1, k2, v;

		// delete zset key
		k1 = encode_z_key(name, key, old_score);
		batch.Delete(k1);

		// update score
		k0 = encode_zs_key(name, key);
		v.assign(score.data(), score.size());
		batch.Put(k0, v);

		// add zset key
		k2 = encode_z_key(name, key, score);
		batch.Put(k2, "");

		s = db->Write(write_options, &batch);
		if(!s.ok()){
			log_error("zset error: %s", s.ToString().c_str());
			return -1;
		}
		return 1;
	}
	return 0;
}
Exemplo n.º 2
0
int SSDB::zdel(const Bytes &name, const Bytes &key) const{
	std::string old_score;
	if(this->zget(name, key, &old_score) == -1){
		return 0;
	}

	leveldb::Status s;
	leveldb::WriteBatch batch;
	std::string k0, k1;

	// delete score
	k0 = encode_zs_key(name, key);
	batch.Delete(k0);

	// delete zset key
	k1 = encode_z_key(name, key, old_score);
	batch.Delete(k1);

	s = db->Write(write_options, &batch);
	if(!s.ok()){
		log_error("zdel error: %s", s.ToString().c_str());
		return -1;
	}
	return 1;
}
Exemplo n.º 3
0
int SSDB::zdel(const Bytes &name, const Bytes &key) const{
	std::string old_score;
	int found = this->zget(name, key, &old_score);
	if(found != 1){
		return 0;
	}

	leveldb::Status s;
	leveldb::WriteBatch batch;
	std::string k0, k1;

	// update zsize
	int64_t size = this->zsize(name);
	if(size == -1){
		return -1;
	}
	size --;
	std::string size_key = encode_zsize_key(name);
	batch.Put(size_key, leveldb::Slice((char *)&size, sizeof(int64_t)));

	// delete score
	k0 = encode_zs_key(name, key);
	batch.Delete(k0);

	// delete zset key
	k1 = encode_z_key(name, key, old_score);
	batch.Delete(k1);

	s = db->Write(write_options, &batch);
	if(!s.ok()){
		log_error("zdel error: %s", s.ToString().c_str());
		return -1;
	}
	return 1;
}
Exemplo n.º 4
0
int SSDB::zget(const Bytes &name, const Bytes &key, std::string *score) const{
	std::string buf = encode_zs_key(name, key);
	leveldb::Status s = db->Get(read_options, buf, score);
	if(s.IsNotFound()){
		return 0;
	}
	if(!s.ok()){
		log_error("zget error: %s", s.ToString().c_str());
		return -1;
	}
	return 1;
}