Skip to content

Commit

Permalink
modify set cmd with cache
Browse files Browse the repository at this point in the history
  • Loading branch information
hahahashen committed Aug 31, 2024
1 parent fd098d5 commit 94ee377
Show file tree
Hide file tree
Showing 9 changed files with 572 additions and 210 deletions.
2 changes: 1 addition & 1 deletion cmake/rediscache.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ExternalProject_Add(
#URL https://github.com/pikiwidb/rediscache/archive/refs/tags/v1.0.7.tar.gz
#URL_HASH MD5=02c8aadc018dd8d4d3803cc420d1d75b
#temp used
GIT_REPOSITORY git@github.com:hahahashen/rediscache.git
GIT_REPOSITORY https://github.com/hahahashen/rediscache.git
GIT_TAG feat/removeUseTcMallocMacroDefinition
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=Debug
Expand Down
80 changes: 40 additions & 40 deletions src/cache/redisCache.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,46 +104,46 @@ class RedisCache {
Status RPushx(std::string &key, std::vector<std::string> &values);

// // Set Commands
// Status SAdd(std::string& key, std::vector<std::string> &members);
// Status SCard(const std::string& key, uint64_t *len);
// Status SIsmember(std::string& key, std::string& member);
// Status SMembers(std::string& key, std::vector<std::string> *members);
// Status SRem(std::string& key, std::vector<std::string> &members);
// Status SRandmember(std::string& key, int64_t count, std::vector<std::string> *members);

// // Zset Commands
// Status ZAdd(std::string& key, std::vector<storage::ScoreMember> &score_members);
// Status ZCard(const std::string& key, uint64_t *len);
// Status ZCount(std::string& key, std::string &min, std::string &max, uint64_t *len);
// Status ZIncrby(std::string& key, std::string& member, double increment);
// Status ZRange(std::string& key,
// int64_t start, int64_t stop,
// std::vector<storage::ScoreMember> *score_members);
// Status ZRangebyscore(std::string& key,
// std::string &min, std::string &max,
// std::vector<storage::ScoreMember> *score_members,
// int64_t offset = 0, int64_t count = -1);
// Status ZRank(std::string& key, std::string& member, int64_t *rank);
// Status ZRem(std::string& key, std::vector<std::string> &members);
// Status ZRemrangebyrank(std::string& key, std::string &min, std::string &max);
// Status ZRemrangebyscore(std::string& key, std::string &min, std::string &max);
// Status ZRevrange(std::string& key,
// int64_t start, int64_t stop,
// std::vector<storage::ScoreMember> *score_members);
// Status ZRevrangebyscore(std::string& key,
// std::string &min, std::string &max,
// std::vector<storage::ScoreMember> *score_members,
// int64_t offset = 0, int64_t count = -1);
// Status ZRevrangebylex(std::string& key,
// std::string &min, std::string &max,
// std::vector<std::string> *members);
// Status ZRevrank(std::string& key, std::string& member, int64_t *rank);
// Status ZScore(std::string& key, std::string& member, double *score);
// Status ZRangebylex(std::string& key,
// std::string &min, std::string &max,
// std::vector<std::string> *members);
// Status ZLexcount(std::string& key, std::string &min, std::string &max, uint64_t *len);
// Status ZRemrangebylex(std::string& key, std::string &min, std::string &max);
Status SAdd(std::string& key, std::vector<std::string> &members);
Status SCard(const std::string& key, uint64_t *len);
Status SIsmember(std::string& key, std::string& member);
Status SMembers(std::string& key, std::vector<std::string> *members);
Status SRem(std::string& key, std::vector<std::string> &members);
Status SRandmember(std::string& key, int64_t count, std::vector<std::string> *members);

// Zset Commands
Status ZAdd(std::string& key, std::vector<storage::ScoreMember> &score_members);
Status ZCard(const std::string& key, uint64_t *len);
Status ZCount(std::string& key, std::string &min, std::string &max, uint64_t *len);
Status ZIncrby(std::string& key, std::string& member, double increment);
Status ZRange(std::string& key,
int64_t start, int64_t stop,
std::vector<storage::ScoreMember> *score_members);
Status ZRangebyscore(std::string& key,
std::string &min, std::string &max,
std::vector<storage::ScoreMember> *score_members,
int64_t offset = 0, int64_t count = -1);
Status ZRank(std::string& key, std::string& member, int64_t *rank);
Status ZRem(std::string& key, std::vector<std::string> &members);
Status ZRemrangebyrank(std::string& key, std::string &min, std::string &max);
Status ZRemrangebyscore(std::string& key, std::string &min, std::string &max);
Status ZRevrange(std::string& key,
int64_t start, int64_t stop,
std::vector<storage::ScoreMember> *score_members);
Status ZRevrangebyscore(std::string& key,
std::string &min, std::string &max,
std::vector<storage::ScoreMember> *score_members,
int64_t offset = 0, int64_t count = -1);
Status ZRevrangebylex(std::string& key,
std::string &min, std::string &max,
std::vector<std::string> *members);
Status ZRevrank(std::string& key, std::string& member, int64_t *rank);
Status ZScore(std::string& key, std::string& member, double *score);
Status ZRangebylex(std::string& key,
std::string &min, std::string &max,
std::vector<std::string> *members);
Status ZLexcount(std::string& key, std::string &min, std::string &max, uint64_t *len);
Status ZRemrangebylex(std::string& key, std::string &min, std::string &max);

// // Bit Commands
// Status SetBit(std::string& key, size_t offset, int64_t value);
Expand Down
136 changes: 136 additions & 0 deletions src/cache/set.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
// Copyright (c) 2024-present, Qihoo, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.

#include "pstd_defer.h"
#include "redisCache.h"

namespace cache {

Status RedisCache::SAdd(std::string& key, std::vector<std::string> &members) {
int ret = RcFreeMemoryIfNeeded(cache_);
if (C_OK != ret) {
return Status::Corruption("[error] Free memory faild !");
}

robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
robj **vals = (robj **)zcallocate(sizeof(robj *) * members.size());
for (unsigned int i = 0; i < members.size(); ++i) {
vals[i] = createObject(OBJ_STRING, sdsnewlen(members[i].data(), members[i].size()));
}
DEFER {
FreeObjectList(vals, members.size());
DecrObjectsRefCount(kobj);
};
int res = RcSAdd(cache_, kobj, vals, members.size());
if (C_OK != res) {
return Status::Corruption("RcSAdd failed");
}

return Status::OK();
}

Status RedisCache::SCard(const std::string& key, uint64_t *len) {
robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
DEFER {
DecrObjectsRefCount(kobj);
};
int ret = RcSCard(cache_, kobj, reinterpret_cast<unsigned long *>(len));
if (C_OK != ret) {
if (REDIS_KEY_NOT_EXIST == ret) {
return Status::NotFound("key not in cache");
}
return Status::Corruption("RcSCard failed");
}

return Status::OK();
}

Status RedisCache::SIsmember(std::string& key, std::string& member) {
int is_member = 0;
robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
robj *mobj = createObject(OBJ_STRING, sdsnewlen(member.data(), member.size()));
DEFER {
DecrObjectsRefCount(kobj, mobj);
};
int ret = RcSIsmember(cache_, kobj, mobj, &is_member);
if (C_OK != ret) {
if (REDIS_KEY_NOT_EXIST == ret) {
return Status::NotFound("key not in cache");
}
return Status::Corruption("SIsmember failed");
}

return is_member ? Status::OK() : Status::NotFound("member not exist");
}

Status RedisCache::SMembers(std::string& key, std::vector<std::string> *members) {
sds *vals = nullptr;
unsigned long vals_size = 0;
robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
DEFER {
DecrObjectsRefCount(kobj);
};
int ret = RcSMembers(cache_, kobj, &vals, &vals_size);
if (C_OK != ret) {
if (REDIS_KEY_NOT_EXIST == ret) {
return Status::NotFound("key not in cache");
}
return Status::Corruption("RcSMembers failed");
}

for (unsigned long i = 0; i < vals_size; ++i) {
members->push_back(std::string(vals[i], sdslen(vals[i])));
}

FreeSdsList(vals, vals_size);
return Status::OK();
}

Status RedisCache::SRem(std::string& key, std::vector<std::string> &members) {
robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
robj **vals = (robj **)zcallocate(sizeof(robj *) * members.size());
for (unsigned int i = 0; i < members.size(); ++i) {
vals[i] = createObject(OBJ_STRING, sdsnewlen(members[i].data(), members[i].size()));
}
DEFER {
FreeObjectList(vals, members.size());
DecrObjectsRefCount(kobj);
};

int ret = RcSRem(cache_, kobj, vals, members.size());
if (C_OK != ret) {
if (REDIS_KEY_NOT_EXIST == ret) {
return Status::NotFound("key not in cache");
}
return Status::Corruption("RcSRem failed");
}

return Status::OK();
}

Status RedisCache::SRandmember(std::string& key, int64_t count, std::vector<std::string> *members) {
sds *vals = nullptr;
unsigned long vals_size = 0;
robj *kobj = createObject(OBJ_STRING, sdsnewlen(key.data(), key.size()));
DEFER {
DecrObjectsRefCount(kobj);
};
int ret = RcSRandmember(cache_, kobj, count, &vals, &vals_size);
if (C_OK != ret) {
if (REDIS_KEY_NOT_EXIST == ret) {
return Status::NotFound("key not in cache");
}
return Status::Corruption("RcSRandmember failed");
}

for (unsigned long i = 0; i < vals_size; ++i) {
members->push_back(std::string(vals[i], sdslen(vals[i])));
}

FreeSdsList(vals, vals_size);
return Status::OK();
}

} // namespace cache
Loading

0 comments on commit 94ee377

Please sign in to comment.