30 RedisNotConnectedFailure = 1,
49 Redis(Client& client) : conn(client) {}
71 bool set(
const char* key,
const char* value);
78 String
get(
const char* key);
85 bool del(
const char* key);
92 bool exists(
const char* key);
100 int append(
const char* key,
const char* value);
108 int publish(
const char* channel,
const char* message);
116 bool expire(
const char* key,
int seconds) {
return _expire_(key, seconds,
"EXPIRE"); }
125 bool expire_at(
const char* key,
int timestamp) {
return _expire_(key, timestamp,
"EXPIREAT"); }
133 bool pexpire(
const char* key,
int ms) {
return _expire_(key, ms,
"PEXPIRE"); }
142 bool pexpire_at(
const char* key,
int timestamp) {
return _expire_(key, timestamp,
"PEXPIREAT"); }
157 int ttl(
const char* key) {
return _ttl_(key,
"TTL"); }
165 int pttl(
const char* key) {
return _ttl_(key,
"PTTL"); }
174 bool hset(
const char* key,
const char* field,
const char* value) {
return _hset_(key, field, value,
"HSET"); }
183 bool hsetnx(
const char* key,
const char* field,
const char* value) {
return _hset_(key, field, value,
"HSETNX"); }
191 String
hget(
const char* key,
const char* field);
198 bool hdel(
const char* key,
const char* field);
205 int hlen(
const char* key);
213 int hstrlen(
const char* key,
const char* field);
221 bool hexists(
const char* key,
const char* field);
229 std::vector<String>
lrange(
const char* key,
int start,
int stop);
231 #if ARDUINO_REDIS_TEST 237 TestResults runTests(
bool logToSerial =
false,
238 String prefix =
"__com.arduino-redis.test",
239 bool retainData =
false);
240 #endif // ARDUINO_REDIS_TEST 245 bool _expire_(
const char*,
int,
const char*);
246 int _ttl_(
const char*,
const char*);
247 bool _hset_(
const char*,
const char*,
const char*,
const char*);
250 #if ARDUINO_REDIS_TEST 254 Redis::TestResults Redis::runTests(
bool logToSerial, String prefix,
bool retainData)
257 std::map<String, std::function<bool(const char*)>> g_Tests
259 {
"set", [
this](
const char* k) {
return set(k,
"!"); } },
260 {
"setget", [
this](
const char* k) {
return set(k,
"!") == 1 &&
get(k) ==
"!"; } },
261 {
"expire", [
this](
const char* k) {
262 return set(k,
"E") &&
expire(k, 5) &&
ttl(k) > 4;
264 {
"pexpire", [
this](
const char* k) {
265 return set(k,
"PE") &&
pexpire(k, 5000) &&
pttl(k) > 4500;
267 {
"dlyexp", [
this](
const char* k) {
268 auto sr =
set(k,
"DE");
272 return sr && t > 5 && t < 7;
274 {
"hset", [
this](
const char* k) {
return hset(k,
"TF",
"H!") &&
hexists(k,
"TF"); } },
275 {
"hsetget", [
this](
const char* k) {
276 return hset(k,
"TF",
"HH") &&
hget(k,
"TF") ==
"HH";
278 {
"hlen", [
this](
const char* k) {
279 for (
int i = 0; i < 10; i++) {
281 hset(k, String(
"field-" + fv).c_str(), fv.c_str());
283 return hlen(k) == 10;
285 {
"hstrlen", [
this](
const char* k) {
286 return hset(k,
"hsr", k) &&
hstrlen(k,
"hsr") == strlen(k);
288 {
"append", [
this](
const char* k) {
return append(k,
"foo") == 3; } },
289 {
"exists", [
this](
const char* k) {
return set(k, k) &&
exists(k); } }
293 Serial.begin(115200);
294 Serial.printf(
"Redis::run_tests(\"%s\") starting...\n", prefix.c_str());
297 auto pFunc = [&prefix](
const String& n) {
return String(prefix +
"." + n); };
299 int total = 0, pass = 0;
300 for (
auto& kv : g_Tests)
302 auto tName = kv.first;
303 auto tFunc = kv.second;
304 auto pName = pFunc(tName);
305 auto tRes = tFunc(pName.c_str());
307 Serial.printf(
"\tTest \"%s\":\t%s\n", tName.c_str(), tRes ?
"pass" :
"FAIL");
309 pass += tRes ? 1 : 0;
313 Serial.printf(
"Result: %d passed / %d total\n", pass, total);
316 for (
auto& kv : g_Tests)
317 (void)
del(pFunc(kv.first).c_str());
319 return { .total = total, .passed = pass };
String hget(const char *key, const char *field)
bool del(const char *key)
bool pexpire_at(const char *key, int timestamp)
int hlen(const char *key)
bool expire_at(const char *key, int timestamp)
int publish(const char *channel, const char *message)
int pttl(const char *key)
bool persist(const char *key)
std::vector< String > lrange(const char *key, int start, int stop)
RedisReturnValue authenticate(const char *password)
bool pexpire(const char *key, int ms)
int hstrlen(const char *key, const char *field)
bool hsetnx(const char *key, const char *field, const char *value)
bool exists(const char *key)
bool expire(const char *key, int seconds)
int append(const char *key, const char *value)
bool hdel(const char *key, const char *field)
bool hset(const char *key, const char *field, const char *value)
bool hexists(const char *key, const char *field)