31 RedisNotConnectedFailure = 1,
50 Redis(Client& client) : conn(client) {}
72 bool set(
const char* key,
const char* value);
79 String
get(
const char* key);
86 bool del(
const char* key);
93 bool exists(
const char* key);
101 int append(
const char* key,
const char* value);
109 int publish(
const char* channel,
const char* message);
117 bool expire(
const char* key,
int seconds) {
return _expire_(key, seconds,
"EXPIRE"); }
126 bool expire_at(
const char* key,
int timestamp) {
return _expire_(key, timestamp,
"EXPIREAT"); }
134 bool pexpire(
const char* key,
int ms) {
return _expire_(key, ms,
"PEXPIRE"); }
143 bool pexpire_at(
const char* key,
int timestamp) {
return _expire_(key, timestamp,
"PEXPIREAT"); }
158 int ttl(
const char* key) {
return _ttl_(key,
"TTL"); }
166 int pttl(
const char* key) {
return _ttl_(key,
"PTTL"); }
175 bool hset(
const char* key,
const char* field,
const char* value) {
return _hset_(key, field, value,
"HSET"); }
184 bool hsetnx(
const char* key,
const char* field,
const char* value) {
return _hset_(key, field, value,
"HSETNX"); }
192 String
hget(
const char* key,
const char* field);
199 bool hdel(
const char* key,
const char* field);
206 int hlen(
const char* key);
214 int hstrlen(
const char* key,
const char* field);
222 bool hexists(
const char* key,
const char* field);
230 std::vector<String>
lrange(
const char* key,
int start,
int stop);
232 #if ARDUINO_REDIS_TEST 238 TestResults runTests(
bool logToSerial =
false,
239 String prefix =
"__com.arduino-redis.test",
240 bool retainData =
false);
241 #endif // ARDUINO_REDIS_TEST 246 bool _expire_(
const char*,
int,
const char*);
247 int _ttl_(
const char*,
const char*);
248 bool _hset_(
const char*,
const char*,
const char*,
const char*);
251 #if ARDUINO_REDIS_TEST 255 Redis::TestResults Redis::runTests(
bool logToSerial, String prefix,
bool retainData)
258 std::map<String, std::function<bool(const char*)>> g_Tests
260 {
"set", [
this](
const char* k) {
return set(k,
"!"); } },
261 {
"setget", [
this](
const char* k) {
return set(k,
"!") == 1 &&
get(k) ==
"!"; } },
262 {
"expire", [
this](
const char* k) {
263 return set(k,
"E") &&
expire(k, 5) &&
ttl(k) > 4;
265 {
"pexpire", [
this](
const char* k) {
266 return set(k,
"PE") &&
pexpire(k, 5000) &&
pttl(k) > 4500;
268 {
"dlyexp", [
this](
const char* k) {
269 auto sr =
set(k,
"DE");
273 return sr && t > 5 && t < 7;
275 {
"hset", [
this](
const char* k) {
return hset(k,
"TF",
"H!") &&
hexists(k,
"TF"); } },
276 {
"hsetget", [
this](
const char* k) {
277 return hset(k,
"TF",
"HH") &&
hget(k,
"TF") ==
"HH";
279 {
"hlen", [
this](
const char* k) {
280 for (
int i = 0; i < 10; i++) {
282 hset(k, String(
"field-" + fv).c_str(), fv.c_str());
284 return hlen(k) == 10;
286 {
"hstrlen", [
this](
const char* k) {
287 return hset(k,
"hsr", k) &&
hstrlen(k,
"hsr") == strlen(k);
289 {
"append", [
this](
const char* k) {
return append(k,
"foo") == 3; } },
290 {
"exists", [
this](
const char* k) {
return set(k, k) &&
exists(k); } }
294 Serial.begin(115200);
295 Serial.printf(
"Redis::run_tests(\"%s\") starting...\n", prefix.c_str());
298 auto pFunc = [&prefix](
const String& n) {
return String(prefix +
"." + n); };
300 int total = 0, pass = 0;
301 for (
auto& kv : g_Tests)
303 auto tName = kv.first;
304 auto tFunc = kv.second;
305 auto pName = pFunc(tName);
306 auto tRes = tFunc(pName.c_str());
308 Serial.printf(
"\tTest \"%s\":\t%s\n", tName.c_str(), tRes ?
"pass" :
"FAIL");
310 pass += tRes ? 1 : 0;
314 Serial.printf(
"Result: %d passed / %d total\n", pass, total);
317 for (
auto& kv : g_Tests)
318 (void)
del(pFunc(kv.first).c_str());
320 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)