Skip to content

Commit

Permalink
feat: add hash basic cmd
Browse files Browse the repository at this point in the history
  • Loading branch information
bigdaronlee163 authored and lidongxu1 committed Sep 27, 2024
1 parent 5b8bf0b commit 1c6ef46
Show file tree
Hide file tree
Showing 9 changed files with 3,001 additions and 47 deletions.
4 changes: 1 addition & 3 deletions include/pika_command.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,16 +151,14 @@ const std::string kCmdNamePKHDel = "pkhdel";
const std::string kCmdNamePKHLen = "pkhlen";
const std::string kCmdNamePKHStrlen = "pkhstrlen";
const std::string kCmdNamePKHIncrby = "pkhincrby";
const std::string kCmdNamePKHIncrbyfloat = "pkhincrbyfloat";
const std::string kCmdNamePKHMSet = "pkhmset";
const std::string kCmdNamePKHMSetex = "pkhmsetex";
const std::string kCmdNamePKHMGet = "pkhmget";
const std::string kCmdNamePKHKeys = "pkhkeys";
const std::string kCmdNamePKHVals = "pkhvals";
const std::string kCmdNamePKHGetall = "pkhgetall";
const std::string kCmdNamePKHScan = "pkhscan";
const std::string kCmdNamePKEHScanRange = "pkehscanrange";
const std::string kCmdNamePKEHRScanRange = "pkehrscanrange";


// List
const std::string kCmdNameLIndex = "lindex";
Expand Down
304 changes: 304 additions & 0 deletions include/pika_pkhash.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,4 +186,308 @@ class PKHSetCmd : public Cmd {
rocksdb::Status s_;
};

// 下面的都是新的命令。
class PKHSetexCmd : public Cmd {
public:
PKHSetexCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHSetexCmd(*this); }

private:
std::string key_, field_, value_;
int64_t sec_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHExistsCmd : public Cmd {
public:
PKHExistsCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHExistsCmd(*this); }

private:
std::string key_, field_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHDelCmd : public Cmd {
public:
PKHDelCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHDelCmd(*this); }

private:
std::string key_;
std::vector<std::string> fields_;
int32_t deleted_ = 0;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHLenCmd : public Cmd {
public:
PKHLenCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHLenCmd(*this); }

private:
std::string key_;
bool is_force_; // 是否强制从db中获取
void DoInitial() override;
rocksdb::Status s_;
};

class PKHStrLenCmd : public Cmd {
public:
PKHStrLenCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHStrLenCmd(*this); }

private:
std::string key_, field_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHIncrbyCmd : public Cmd {
public:
PKHIncrbyCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHIncrbyCmd(*this); }

private:
std::string key_, field_;
int64_t by_;
int64_t sec_; // TODO(DDD):接受 ttl 参数。
void DoInitial() override;
rocksdb::Status s_;
};

class PKHMSetCmd : public Cmd {
public:
PKHMSetCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHMSetCmd(*this); }

private:
std::string key_;
std::vector<storage::FieldValue> fvs_;
void DoInitial() override;
rocksdb::Status s_;
};
class PKHMSetexCmd : public Cmd {
public:
PKHMSetexCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHMSetexCmd(*this); }

private:
std::string key_;
std::vector<storage::FieldValueTTL> fvts_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHMGetCmd : public Cmd {
public:
PKHMGetCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHMGetCmd(*this); }

private:
std::string key_;
std::vector<std::string> fields_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHKeysCmd : public Cmd {
public:
PKHKeysCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHKeysCmd(*this); }

private:
std::string key_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHValsCmd : public Cmd {
public:
PKHValsCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHValsCmd(*this); }

private:
std::string key_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHGetAllCmd : public Cmd {
public:
PKHGetAllCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHGetAllCmd(*this); }

private:
std::string key_;
bool is_wt_;
void DoInitial() override;
rocksdb::Status s_;
};

class PKHScanCmd : public Cmd {
public:
PKHScanCmd(const std::string& name, int arity, uint32_t flag)
: Cmd(name, arity, flag, static_cast<uint32_t>(AclCategory::PKHASH)) {}
std::vector<std::string> current_key() const override {
std::vector<std::string> res;
res.push_back(key_);
return res;
}
void Do() override;
void DoThroughDB() override;
void DoUpdateCache() override;
void Split(const HintKeys& hint_keys) override {};
void Merge() override {};
Cmd* Clone() override { return new PKHScanCmd(*this); }

private:
std::string key_, pattern_;
int64_t cursor_, count_;
bool is_wt_;
virtual void Clear() {
pattern_ = "*";
count_ = 10;
is_wt_ = false;
}

void DoInitial() override;
rocksdb::Status s_;
};

#endif
Loading

0 comments on commit 1c6ef46

Please sign in to comment.