Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion include/pika_cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class PikaCache : public pstd::noncopyable, public std::enable_shared_from_this<
rocksdb::Status RPushnx(std::string& key, std::vector<std::string> &values, int64_t ttl);
rocksdb::Status RPushnxWithoutTTL(std::string& key, std::vector<std::string> &values);
rocksdb::Status LPushIfKeyExist(std::string& key, std::vector<std::string> &values);

// Set Commands
rocksdb::Status SAdd(std::string& key, std::vector<std::string>& members);
rocksdb::Status SAddIfKeyExist(std::string& key, std::vector<std::string>& members);
Expand Down
234 changes: 132 additions & 102 deletions src/pika_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -141,54 +141,69 @@ std::map<storage::DataType, int64_t> PikaCache::TTL(std::string &key, std::map<s
std::map<storage::DataType, int64_t> ret;
int64_t timestamp = 0;

std::string CacheKeyPrefixK = PCacheKeyPrefixK + key;
int cache_indexk = CacheIndex(CacheKeyPrefixK);
s = caches_[cache_indexk]->TTL(CacheKeyPrefixK, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kStrings] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kStrings] = -3;
(*type_status)[storage::DataType::kStrings] = s;
}

std::string CacheKeyPrefixH = PCacheKeyPrefixH + key;
int cache_indexh = CacheIndex(CacheKeyPrefixH);
s = caches_[cache_indexh]->TTL(CacheKeyPrefixH, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kHashes] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kHashes] = -3;
(*type_status)[storage::DataType::kHashes] = s;
}

std::string CacheKeyPrefixL = PCacheKeyPrefixL + key;
int cache_indexl = CacheIndex(CacheKeyPrefixL);
s = caches_[cache_indexl]->TTL(CacheKeyPrefixL, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kLists] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kLists] = -3;
(*type_status)[storage::DataType::kLists] = s;
}

std::string CacheKeyPrefixS = PCacheKeyPrefixS + key;
int cache_indexs = CacheIndex(CacheKeyPrefixS);
s = caches_[cache_indexs]->TTL(CacheKeyPrefixS, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kSets] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kSets] = -3;
(*type_status)[storage::DataType::kSets] = s;
}

std::string CacheKeyPrefixZ = PCacheKeyPrefixZ + key;
int cache_indexz = CacheIndex(CacheKeyPrefixZ);
s = caches_[cache_indexz]->TTL(CacheKeyPrefixZ, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kZSets] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kZSets] = -3;
(*type_status)[storage::DataType::kZSets] = s;
{
std::string CacheKeyPrefixK = PCacheKeyPrefixK + key;
int cache_indexk = CacheIndex(CacheKeyPrefixK);
std::lock_guard lm(*cache_mutexs_[cache_indexk]);
s = caches_[cache_indexk]->TTL(CacheKeyPrefixK, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kStrings] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kStrings] = -3;
(*type_status)[storage::DataType::kStrings] = s;
}
}

{
std::string CacheKeyPrefixH = PCacheKeyPrefixH + key;
int cache_indexh = CacheIndex(CacheKeyPrefixH);
std::lock_guard lm(*cache_mutexs_[cache_indexh]);
s = caches_[cache_indexh]->TTL(CacheKeyPrefixH, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kHashes] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kHashes] = -3;
(*type_status)[storage::DataType::kHashes] = s;
}
}

{
std::string CacheKeyPrefixL = PCacheKeyPrefixL + key;
int cache_indexl = CacheIndex(CacheKeyPrefixL);
std::lock_guard lm(*cache_mutexs_[cache_indexl]);
s = caches_[cache_indexl]->TTL(CacheKeyPrefixL, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kLists] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kLists] = -3;
(*type_status)[storage::DataType::kLists] = s;
}
}

{
std::string CacheKeyPrefixS = PCacheKeyPrefixS + key;
int cache_indexs = CacheIndex(CacheKeyPrefixS);
std::lock_guard lm(*cache_mutexs_[cache_indexs]);
s = caches_[cache_indexs]->TTL(CacheKeyPrefixS, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kSets] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kSets] = -3;
(*type_status)[storage::DataType::kSets] = s;
}
}

{
std::string CacheKeyPrefixZ = PCacheKeyPrefixZ + key;
int cache_indexz = CacheIndex(CacheKeyPrefixZ);
std::lock_guard lm(*cache_mutexs_[cache_indexz]);
s = caches_[cache_indexz]->TTL(CacheKeyPrefixZ, &timestamp);
if (s.ok() || s.IsNotFound()) {
ret[storage::DataType::kZSets] = timestamp;
} else if (!s.IsNotFound()) {
ret[storage::DataType::kZSets] = -3;
(*type_status)[storage::DataType::kZSets] = s;
}
}
return ret;
}
Expand Down Expand Up @@ -226,68 +241,83 @@ Status PikaCache::GetType(const std::string& key, bool single, std::vector<std::

Status s;
std::string value;
std::string CacheKeyPrefixK = PCacheKeyPrefixK + key;
int cache_indexk = CacheIndex(CacheKeyPrefixK);
s = caches_[cache_indexk]->Get(CacheKeyPrefixK, &value);
if (s.ok()) {
types.emplace_back("string");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
{
std::string CacheKeyPrefixK = PCacheKeyPrefixK + key;
int cache_indexk = CacheIndex(CacheKeyPrefixK);
std::lock_guard lm(*cache_mutexs_[cache_indexk]);
s = caches_[cache_indexk]->Get(CacheKeyPrefixK, &value);
if (s.ok()) {
types.emplace_back("string");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
}
}

uint64_t hashes_len = 0;
std::string CacheKeyPrefixH = PCacheKeyPrefixH + key;
int cache_indexh = CacheIndex(CacheKeyPrefixH);
s = caches_[cache_indexh]->HLen(CacheKeyPrefixH, &hashes_len);
if (s.ok() && hashes_len != 0) {
types.emplace_back("hash");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
{
uint64_t hashes_len = 0;
std::string CacheKeyPrefixH = PCacheKeyPrefixH + key;
int cache_indexh = CacheIndex(CacheKeyPrefixH);
std::lock_guard lm(*cache_mutexs_[cache_indexh]);
s = caches_[cache_indexh]->HLen(CacheKeyPrefixH, &hashes_len);
if (s.ok() && hashes_len != 0) {
types.emplace_back("hash");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
}
}

uint64_t lists_len = 0;
std::string CacheKeyPrefixL = PCacheKeyPrefixL + key;
int cache_indexl = CacheIndex(CacheKeyPrefixL);
s = caches_[cache_indexl]->LLen(CacheKeyPrefixL, &lists_len);
if (s.ok() && lists_len != 0) {
types.emplace_back("list");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
{
uint64_t lists_len = 0;
std::string CacheKeyPrefixL = PCacheKeyPrefixL + key;
int cache_indexl = CacheIndex(CacheKeyPrefixL);
std::lock_guard lm(*cache_mutexs_[cache_indexl]);
s = caches_[cache_indexl]->LLen(CacheKeyPrefixL, &lists_len);
if (s.ok() && lists_len != 0) {
types.emplace_back("list");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
}
}

uint64_t zsets_size = 0;
std::string CacheKeyPrefixZ = PCacheKeyPrefixZ + key;
int cache_indexz = CacheIndex(CacheKeyPrefixZ);
s = caches_[cache_indexz]->ZCard(CacheKeyPrefixZ, &zsets_size);
if (s.ok() && zsets_size != 0) {
types.emplace_back("zset");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
{
uint64_t zsets_size = 0;
std::string CacheKeyPrefixZ = PCacheKeyPrefixZ + key;
int cache_indexz = CacheIndex(CacheKeyPrefixZ);
std::lock_guard lm(*cache_mutexs_[cache_indexz]);
s = caches_[cache_indexz]->ZCard(CacheKeyPrefixZ, &zsets_size);
if (s.ok() && zsets_size != 0) {
types.emplace_back("zset");
} else if (!s.IsNotFound()) {
return s;
}
if (single && !types.empty()) {
return s;
}
}

uint64_t sets_size = 0;
std::string CacheKeyPrefixS = PCacheKeyPrefixS + key;
int cache_indexs = CacheIndex(CacheKeyPrefixS);
s = caches_[cache_indexs]->SCard(CacheKeyPrefixS, &sets_size);
if (s.ok() && sets_size != 0) {
types.emplace_back("set");
} else if (!s.IsNotFound()) {
return s;
}
if (single && types.empty()) {
types.emplace_back("none");
{
uint64_t sets_size = 0;
std::string CacheKeyPrefixS = PCacheKeyPrefixS + key;
int cache_indexs = CacheIndex(CacheKeyPrefixS);
std::lock_guard lm(*cache_mutexs_[cache_indexs]);
s = caches_[cache_indexs]->SCard(CacheKeyPrefixS, &sets_size);
if (s.ok() && sets_size != 0) {
types.emplace_back("set");
} else if (!s.IsNotFound()) {
return s;
}
if (single && types.empty()) {
types.emplace_back("none");
}
}
return Status::OK();
}
Expand Down
Loading