Arduino-Redis
A Redis library for Arduino.
Redis.h
Go to the documentation of this file.
1 
27 #ifndef REDIS_H
28 #define REDIS_H
29 
30 #include "Arduino.h"
31 #include "Client.h"
32 
33 #include <vector>
34 
36 typedef enum
37 {
44 
46 typedef enum
47 {
58 
60 typedef enum
61 {
69 
73 typedef enum
74 {
78 
87 class Redis
88 {
89 public:
91  typedef void (*RedisMsgCallback)(Redis *, String channel, String message);
92  typedef void (*LoopCallback)();
95 
101  Redis(Client &client) : conn(client) {}
102 
103  ~Redis() {}
104  Redis(const Redis &) = delete;
105  Redis &operator=(const Redis &) = delete;
106  Redis(const Redis &&) = delete;
107  Redis &operator=(const Redis &&) = delete;
108 
114  RedisReturnValue authenticate(const char *password);
115 
125  bool set(const char *key, const char *value);
126 
132  String get(const char *key);
133 
139  bool del(const char *key);
140 
146  bool exists(const char *key);
147 
154  int append(const char *key, const char *value);
155 
162  int publish(const char *channel, const char *message);
163 
170  bool expire(const char *key, int seconds) { return _expire_(key, seconds, "EXPIRE"); }
171 
179  bool expire_at(const char *key, int timestamp) { return _expire_(key, timestamp, "EXPIREAT"); }
180 
187  bool pexpire(const char *key, int ms) { return _expire_(key, ms, "PEXPIRE"); }
188 
196  bool pexpire_at(const char *key, int timestamp) { return _expire_(key, timestamp, "PEXPIREAT"); }
197 
203  bool persist(const char *key);
204 
211  int pttl(const char *key) { return _ttl_(key, "PTTL"); }
212 
219  int ttl(const char *key) { return _ttl_(key, "TTL"); }
220 
228  bool hset(const char *key, const char *field, const char *value) { return _hset_(key, field, value, "HSET"); }
229 
237  bool hsetnx(const char *key, const char *field, const char *value) { return _hset_(key, field, value, "HSETNX"); }
238 
245  String hget(const char *key, const char *field);
246 
253  bool hdel(const char *key, const char *field);
254 
260  int hlen(const char *key);
261 
268  int hstrlen(const char *key, const char *field);
269 
276  bool hexists(const char *key, const char *field);
277 
284  String lindex(const char *key, int index);
285 
292  int llen(const char *key);
293 
298  String lpop(const char *key);
299 
305  int lpos(const char *key, const char *element);
306 
313  int lpush(const char *key, const char *value, bool exclusive = false);
314 
322  std::vector<String> lrange(const char *key, int start, int stop);
323 
330  int lrem(const char *key, int count, const char *element);
331 
338  bool lset(const char *key, int index, const char *element);
339 
346  bool ltrim(const char *key, int start, int stop);
347 
352  String rpop(const char *key);
353 
360  int rpush(const char *key, const char *value, bool exclusive = false);
361 
365  bool subscribe(const char *channel) { return _subscribe(SubscribeSpec{false, String(channel)}); }
366 
370  bool psubscribe(const char *pattern) { return _subscribe(SubscribeSpec{true, String(pattern)}); }
371 
375  bool unsubscribe(const char *channelOrPattern);
376 
385  bool tsadd(const char *key, long timestamp, const int value);
386 
394  int xack(const char *key, const char *group, const char *id);
395 
403  String xadd(const char *key, const char *id, const char *field,
404  const char *value);
405 
416  std::vector<String> xautoclaim(const char *key, const char *group,
417  const char* consumer, unsigned int min_idle_time, const char *start,
418  unsigned int count, bool justid);
419 
429  std::vector<String> xclaim(const char *key, const char* group,
430  const char *consumer,
431  unsigned int min_idle_time, const char *id, unsigned int idle_ms,
432  unsigned int time_ms, unsigned int retrycount, bool force, bool justid,
433  const char *lastid);
434 
442  int xdel(const char *key, const char *id);
443 
453  bool xgroup_create(const char *key, const char *group, const char *id,
454  bool mkstream);
455 
464  int xgroup_createconsumer(const char *key, const char *group,
465  const char *consumer);
466 
474  int xgroup_delconsumer(const char *key, const char *group,
475  const char *consumer);
476 
483  int xgroup_destroy(const char *key, const char *group);
484 
492  bool xgroup_setid(const char* key, const char *group, const char *id);
493 
501  std::vector<String> xinfo_consumers(const char *key, const char* group);
502 
509  std::vector<String> xinfo_groups(const char *key);
510 
519  std::vector<String> xinfo_stream(const char *key, bool full,
520  unsigned int count);
521 
527  int xlen(const char *key);
528 
539  std::vector<String> xpending(const char *key, const char* group,
540  unsigned int min_idle_time, const char *start, const char *end,
541  unsigned int count, const char *consumer);
542 
551  std::vector<String> xrange(const char *key, const char *start,
552  const char *end, unsigned int count);
553 
560  std::vector<String> xread(unsigned int count, unsigned int block,
561  const char *key, const char *id);
562 
573  std::vector<String> xreadgroup(const char *group, const char *consumer,
574  unsigned int count, unsigned int block_ms, bool noack, const char *key,
575  const char *id);
576 
584  std::vector<String> xrevrange(const char *key, const char *end,
585  const char* start, unsigned int count);
586 
595  int xtrim(const char *key, const char *strategy, XtrimCompareType compare,
596  int threshold, int count);
597 
598  // auxiliary functions
599 
605  bool isErrorReturn(std::vector<String>& returnVec);
606 
612  bool isNilReturn(String returnString) { return returnString == "(nil)"; }
613 
624  RedisSubscribeResult startSubscribing(RedisMsgCallback messageCallback, RedisMsgErrorCallback errorCallback = nullptr);
625  RedisSubscribeResult startSubscribingNonBlocking(RedisMsgCallback messageCallback, LoopCallback loopCallback, RedisMsgErrorCallback errorCallback = nullptr);
626 
630  void stopSubscribing() { subLoopRun = false; }
631 
632  String info(const char *section);
633 
634  // The following are (obstensibly) for library testing purposes only
635  void setTestContext(const void *context) { _test_context = context; }
636  const void *getTestContext() { return _test_context; }
637 
638 private:
639  typedef struct
640  {
641  bool pattern;
642  String spec;
643  } SubscribeSpec;
644 
645  bool _subscribe(SubscribeSpec spec);
646 
647  Client &conn;
648  std::vector<SubscribeSpec> subSpec;
649  bool subscriberMode = false;
650  bool subLoopRun = false;
651 
652  bool _expire_(const char *, int, const char *);
653  int _ttl_(const char *, const char *);
654  bool _hset_(const char *, const char *, const char *, const char *);
655 
656  const void *_test_context;
657 };
658 
659 #endif
Redis::xgroup_setid
bool xgroup_setid(const char *key, const char *group, const char *id)
Definition: Redis.cpp:311
Redis::lset
bool lset(const char *key, int index, const char *element)
Definition: Redis.cpp:151
RedisMessageError
RedisMessageError
Definition: Redis.h:60
Redis::ttl
int ttl(const char *key)
Definition: Redis.h:219
Redis::hget
String hget(const char *key, const char *field)
Definition: Redis.cpp:77
Redis::xlen
int xlen(const char *key)
Definition: Redis.cpp:387
RedisMessageBadResponseType
@ RedisMessageBadResponseType
The underlying Redis type detected in the message is not of the type expected.
Definition: Redis.h:63
Redis::~Redis
~Redis()
Definition: Redis.h:103
Redis::pexpire_at
bool pexpire_at(const char *key, int timestamp)
Definition: Redis.h:196
Redis
Definition: Redis.h:87
Redis::stopSubscribing
void stopSubscribing()
Definition: Redis.h:630
Redis::xpending
std::vector< String > xpending(const char *key, const char *group, unsigned int min_idle_time, const char *start, const char *end, unsigned int count, const char *consumer)
Definition: Redis.cpp:392
Redis::RedisMsgErrorCallback
void(* RedisMsgErrorCallback)(Redis *, RedisMessageError)
Definition: Redis.h:94
Redis::subscribe
bool subscribe(const char *channel)
Definition: Redis.h:365
Redis::del
bool del(const char *key)
Definition: Redis.cpp:37
RedisAuthFailure
@ RedisAuthFailure
The authentication credentials used are not valid.
Definition: Redis.h:42
Redis::lpush
int lpush(const char *key, const char *value, bool exclusive=false)
Definition: Redis.cpp:141
Redis::get
String get(const char *key)
Definition: Redis.cpp:32
RedisMessageUnknownType
@ RedisMessageUnknownType
An unknown error occurred.
Definition: Redis.h:67
Redis::xgroup_destroy
int xgroup_destroy(const char *key, const char *group)
Definition: Redis.cpp:306
RedisSuccess
@ RedisSuccess
Definition: Redis.h:38
Redis::startSubscribing
RedisSubscribeResult startSubscribing(RedisMsgCallback messageCallback, RedisMsgErrorCallback errorCallback=nullptr)
Definition: Redis.cpp:717
Redis::xdel
int xdel(const char *key, const char *id)
Definition: Redis.cpp:276
Redis::xadd
String xadd(const char *key, const char *id, const char *field, const char *value)
Definition: Redis.cpp:178
Redis::RedisMsgCallback
void(* RedisMsgCallback)(Redis *, String channel, String message)
Definition: Redis.h:91
Redis::xack
int xack(const char *key, const char *group, const char *id)
Definition: Redis.cpp:173
Redis::xgroup_createconsumer
int xgroup_createconsumer(const char *key, const char *group, const char *consumer)
Definition: Redis.cpp:294
Redis::xinfo_consumers
std::vector< String > xinfo_consumers(const char *key, const char *group)
Definition: Redis.cpp:316
Redis::unsubscribe
bool unsubscribe(const char *channelOrPattern)
Definition: Redis.cpp:625
Redis::expire_at
bool expire_at(const char *key, int timestamp)
Definition: Redis.h:179
RedisSubscribeSetupFailure
@ RedisSubscribeSetupFailure
Setting up for subscription mode failed.
Definition: Redis.h:51
RedisSubscribeSuccess
@ RedisSubscribeSuccess
Definition: Redis.h:56
Redis::pexpire
bool pexpire(const char *key, int ms)
Definition: Redis.h:187
RedisSubscribeResult
RedisSubscribeResult
Definition: Redis.h:46
Redis::xrange
std::vector< String > xrange(const char *key, const char *start, const char *end, unsigned int count)
Definition: Redis.cpp:433
Redis::startSubscribingNonBlocking
RedisSubscribeResult startSubscribingNonBlocking(RedisMsgCallback messageCallback, LoopCallback loopCallback, RedisMsgErrorCallback errorCallback=nullptr)
Definition: Redis.cpp:638
Redis::operator=
Redis & operator=(const Redis &)=delete
Redis::publish
int publish(const char *channel, const char *message)
Definition: Redis.cpp:47
Redis::pttl
int pttl(const char *key)
Definition: Redis.h:211
RedisMessageTruncatedResponse
@ RedisMessageTruncatedResponse
The message response was truncated early.
Definition: Redis.h:65
Redis::persist
bool persist(const char *key)
Definition: Redis.cpp:62
Redis::lrange
std::vector< String > lrange(const char *key, int start, int stop)
Definition: Redis.cpp:102
Redis::setTestContext
void setTestContext(const void *context)
Definition: Redis.h:635
Redis::rpush
int rpush(const char *key, const char *value, bool exclusive=false)
Definition: Redis.cpp:607
Redis::xreadgroup
std::vector< String > xreadgroup(const char *group, const char *consumer, unsigned int count, unsigned int block_ms, bool noack, const char *key, const char *id)
Definition: Redis.cpp:499
Redis::xinfo_stream
std::vector< String > xinfo_stream(const char *key, bool full, unsigned int count)
Definition: Redis.cpp:354
Redis::authenticate
RedisReturnValue authenticate(const char *password)
Definition: Redis.cpp:4
Redis::lpop
String lpop(const char *key)
Definition: Redis.cpp:131
Redis::tsadd
bool tsadd(const char *key, long timestamp, const int value)
Definition: Redis.cpp:161
XtrimCompareType
XtrimCompareType
Definition: Redis.h:73
Redis::lpos
int lpos(const char *key, const char *element)
Definition: Redis.cpp:136
RedisSubscribeOtherError
@ RedisSubscribeOtherError
An unknown error occurred.
Definition: Redis.h:55
Redis::isErrorReturn
bool isErrorReturn(std::vector< String > &returnVec)
Definition: Redis.cpp:722
RedisSubscribeBadCallback
@ RedisSubscribeBadCallback
One of the callback parameters given is invalid.
Definition: Redis.h:49
Redis::xgroup_create
bool xgroup_create(const char *key, const char *group, const char *id, bool mkstream)
Definition: Redis.cpp:281
Redis::hsetnx
bool hsetnx(const char *key, const char *field, const char *value)
Definition: Redis.h:237
Redis::exists
bool exists(const char *key)
Definition: Redis.cpp:52
Redis::isNilReturn
bool isNilReturn(String returnString)
Definition: Redis.h:612
XtrimCompareAtLeast
@ XtrimCompareAtLeast
Definition: Redis.h:76
Redis::xgroup_delconsumer
int xgroup_delconsumer(const char *key, const char *group, const char *consumer)
Definition: Redis.cpp:300
RedisNotConnectedFailure
@ RedisNotConnectedFailure
Authenticate attempted before the connection has been established.
Definition: Redis.h:40
Redis::lindex
String lindex(const char *key, int index)
Definition: Redis.cpp:121
Redis::hstrlen
int hstrlen(const char *key, const char *field)
Definition: Redis.cpp:92
Redis::xinfo_groups
std::vector< String > xinfo_groups(const char *key)
Definition: Redis.cpp:335
Redis::hdel
bool hdel(const char *key, const char *field)
Definition: Redis.cpp:82
Redis::xclaim
std::vector< String > xclaim(const char *key, const char *group, const char *consumer, unsigned int min_idle_time, const char *id, unsigned int idle_ms, unsigned int time_ms, unsigned int retrycount, bool force, bool justid, const char *lastid)
Definition: Redis.cpp:218
RedisSubscribeServerDisconnected
@ RedisSubscribeServerDisconnected
The remote end disconnected, retry may be available.
Definition: Redis.h:53
Redis::llen
int llen(const char *key)
Definition: Redis.cpp:126
Redis::hexists
bool hexists(const char *key, const char *field)
Definition: Redis.cpp:97
Redis::xtrim
int xtrim(const char *key, const char *strategy, XtrimCompareType compare, int threshold, int count)
Definition: Redis.cpp:575
Redis::Redis
Redis(Client &client)
Definition: Redis.h:101
RedisReturnValue
RedisReturnValue
Definition: Redis.h:36
Redis::xautoclaim
std::vector< String > xautoclaim(const char *key, const char *group, const char *consumer, unsigned int min_idle_time, const char *start, unsigned int count, bool justid)
Definition: Redis.cpp:184
Redis::append
int append(const char *key, const char *value)
Definition: Redis.cpp:42
Redis::hset
bool hset(const char *key, const char *field, const char *value)
Definition: Redis.h:228
Redis::psubscribe
bool psubscribe(const char *pattern)
Definition: Redis.h:370
Redis::set
bool set(const char *key, const char *value)
Definition: Redis.cpp:27
XtrimCompareExact
@ XtrimCompareExact
Definition: Redis.h:75
Redis::rpop
String rpop(const char *key)
Definition: Redis.cpp:602
Redis::getTestContext
const void * getTestContext()
Definition: Redis.h:636
Redis::lrem
int lrem(const char *key, int count, const char *element)
Definition: Redis.cpp:146
Redis::info
String info(const char *section)
Definition: Redis.cpp:597
Redis::hlen
int hlen(const char *key)
Definition: Redis.cpp:87
Redis::ltrim
bool ltrim(const char *key, int start, int stop)
Definition: Redis.cpp:156
Redis::xread
std::vector< String > xread(unsigned int count, unsigned int block, const char *key, const char *id)
Definition: Redis.cpp:461
Redis::LoopCallback
void(* LoopCallback)()
Definition: Redis.h:92
Redis::xrevrange
std::vector< String > xrevrange(const char *key, const char *end, const char *start, unsigned int count)
Definition: Redis.cpp:547
Redis::expire
bool expire(const char *key, int seconds)
Definition: Redis.h:170