Arduino-Redis
A Redis library for Arduino.
Redis.h
Go to the documentation of this file.
1 
26 #ifndef REDIS_H
27 #define REDIS_H
28 
29 #include "Arduino.h"
30 #include "Client.h"
31 
32 #include <vector>
33 
35 typedef enum
36 {
43 
45 typedef enum
46 {
57 
59 typedef enum
60 {
68 
72 typedef enum
73 {
77 
86 class Redis
87 {
88 public:
90  typedef void (*RedisMsgCallback)(Redis *, String channel, String message);
91  typedef void (*LoopCallback)();
94 
100  Redis(Client &client) : conn(client) {}
101 
102  ~Redis() {}
103  Redis(const Redis &) = delete;
104  Redis &operator=(const Redis &) = delete;
105  Redis(const Redis &&) = delete;
106  Redis &operator=(const Redis &&) = delete;
107 
113  RedisReturnValue authenticate(const char *password);
114 
124  bool set(const char *key, const char *value);
125 
131  String get(const char *key);
132 
138  bool del(const char *key);
139 
145  bool exists(const char *key);
146 
153  int append(const char *key, const char *value);
154 
161  int publish(const char *channel, const char *message);
162 
169  bool expire(const char *key, int seconds) { return _expire_(key, seconds, "EXPIRE"); }
170 
178  bool expire_at(const char *key, int timestamp) { return _expire_(key, timestamp, "EXPIREAT"); }
179 
186  bool pexpire(const char *key, int ms) { return _expire_(key, ms, "PEXPIRE"); }
187 
195  bool pexpire_at(const char *key, int timestamp) { return _expire_(key, timestamp, "PEXPIREAT"); }
196 
202  bool persist(const char *key);
203 
210  int pttl(const char *key) { return _ttl_(key, "PTTL"); }
211 
218  int ttl(const char *key) { return _ttl_(key, "TTL"); }
219 
227  bool hset(const char *key, const char *field, const char *value) { return _hset_(key, field, value, "HSET"); }
228 
236  bool hsetnx(const char *key, const char *field, const char *value) { return _hset_(key, field, value, "HSETNX"); }
237 
244  String hget(const char *key, const char *field);
245 
252  bool hdel(const char *key, const char *field);
253 
259  int hlen(const char *key);
260 
267  int hstrlen(const char *key, const char *field);
268 
275  bool hexists(const char *key, const char *field);
276 
283  String lindex(const char *key, int index);
284 
291  int llen(const char *key);
292 
297  String lpop(const char *key);
298 
304  int lpos(const char *key, const char *element);
305 
312  int lpush(const char *key, const char *value, bool exclusive = false);
313 
321  std::vector<String> lrange(const char *key, int start, int stop);
322 
329  int lrem(const char *key, int count, const char *element);
330 
337  bool lset(const char *key, int index, const char *element);
338 
345  bool ltrim(const char *key, int start, int stop);
346 
351  String rpop(const char *key);
352 
359  int rpush(const char *key, const char *value, bool exclusive = false);
360 
364  bool subscribe(const char *channel) { return _subscribe(SubscribeSpec{false, String(channel)}); }
365 
369  bool psubscribe(const char *pattern) { return _subscribe(SubscribeSpec{true, String(pattern)}); }
370 
374  bool unsubscribe(const char *channelOrPattern);
375 
384  bool tsadd(const char *key, long timestamp, const int value);
385 
393  int xack(const char *key, const char *group, const char *id);
394 
402  String xadd(const char *key, const char *id, const char *field,
403  const char *value);
404 
415  std::vector<String> xautoclaim(const char *key, const char *group,
416  const char* consumer, unsigned int min_idle_time, const char *start,
417  unsigned int count, bool justid);
418 
428  std::vector<String> xclaim(const char *key, const char* group,
429  const char *consumer,
430  unsigned int min_idle_time, const char *id, unsigned int idle_ms,
431  unsigned int time_ms, unsigned int retrycount, bool force, bool justid,
432  const char *lastid);
433 
441  int xdel(const char *key, const char *id);
442 
452  bool xgroup_create(const char *key, const char *group, const char *id,
453  bool mkstream);
454 
463  int xgroup_createconsumer(const char *key, const char *group,
464  const char *consumer);
465 
473  int xgroup_delconsumer(const char *key, const char *group,
474  const char *consumer);
475 
482  int xgroup_destroy(const char *key, const char *group);
483 
491  bool xgroup_setid(const char* key, const char *group, const char *id);
492 
500  std::vector<String> xinfo_consumers(const char *key, const char* group);
501 
508  std::vector<String> xinfo_groups(const char *key);
509 
518  std::vector<String> xinfo_stream(const char *key, bool full,
519  unsigned int count);
520 
526  int xlen(const char *key);
527 
538  std::vector<String> xpending(const char *key, const char* group,
539  unsigned int min_idle_time, const char *start, const char *end,
540  unsigned int count, const char *consumer);
541 
550  std::vector<String> xrange(const char *key, const char *start,
551  const char *end, unsigned int count);
552 
559  std::vector<String> xread(unsigned int count, unsigned int block,
560  const char *key, const char *id);
561 
572  std::vector<String> xreadgroup(const char *group, const char *consumer,
573  unsigned int count, unsigned int block_ms, bool noack, const char *key,
574  const char *id);
575 
583  std::vector<String> xrevrange(const char *key, const char *end,
584  const char* start, unsigned int count);
585 
594  int xtrim(const char *key, const char *strategy, XtrimCompareType compare,
595  int threshold, int count);
596 
597  // auxiliary functions
598 
604  bool isErrorReturn(std::vector<String>& returnVec);
605 
616  RedisSubscribeResult startSubscribing(RedisMsgCallback messageCallback, RedisMsgErrorCallback errorCallback = nullptr);
617  RedisSubscribeResult startSubscribingNonBlocking(RedisMsgCallback messageCallback, LoopCallback loopCallback, RedisMsgErrorCallback errorCallback = nullptr);
618 
622  void stopSubscribing() { subLoopRun = false; }
623 
624  String info(const char *section);
625 
626  // The following are (obstensibly) for library testing purposes only
627  void setTestContext(const void *context) { _test_context = context; }
628  const void *getTestContext() { return _test_context; }
629 
630 private:
631  typedef struct
632  {
633  bool pattern;
634  String spec;
635  } SubscribeSpec;
636 
637  bool _subscribe(SubscribeSpec spec);
638 
639  Client &conn;
640  std::vector<SubscribeSpec> subSpec;
641  bool subscriberMode = false;
642  bool subLoopRun = false;
643 
644  bool _expire_(const char *, int, const char *);
645  int _ttl_(const char *, const char *);
646  bool _hset_(const char *, const char *, const char *, const char *);
647 
648  const void *_test_context;
649 };
650 
651 #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:59
Redis::ttl
int ttl(const char *key)
Definition: Redis.h:218
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:62
Redis::~Redis
~Redis()
Definition: Redis.h:102
Redis::pexpire_at
bool pexpire_at(const char *key, int timestamp)
Definition: Redis.h:195
Redis
Definition: Redis.h:86
Redis::stopSubscribing
void stopSubscribing()
Definition: Redis.h:622
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:93
Redis::subscribe
bool subscribe(const char *channel)
Definition: Redis.h:364
Redis::del
bool del(const char *key)
Definition: Redis.cpp:37
RedisAuthFailure
@ RedisAuthFailure
The authentication credentials used are not valid.
Definition: Redis.h:41
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:66
Redis::xgroup_destroy
int xgroup_destroy(const char *key, const char *group)
Definition: Redis.cpp:306
RedisSuccess
@ RedisSuccess
Definition: Redis.h:37
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:90
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:178
RedisSubscribeSetupFailure
@ RedisSubscribeSetupFailure
Setting up for subscription mode failed.
Definition: Redis.h:50
RedisSubscribeSuccess
@ RedisSubscribeSuccess
Definition: Redis.h:55
Redis::pexpire
bool pexpire(const char *key, int ms)
Definition: Redis.h:186
RedisSubscribeResult
RedisSubscribeResult
Definition: Redis.h:45
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:210
RedisMessageTruncatedResponse
@ RedisMessageTruncatedResponse
The message response was truncated early.
Definition: Redis.h:64
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:627
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:72
Redis::lpos
int lpos(const char *key, const char *element)
Definition: Redis.cpp:136
RedisSubscribeOtherError
@ RedisSubscribeOtherError
An unknown error occurred.
Definition: Redis.h:54
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:48
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:236
Redis::exists
bool exists(const char *key)
Definition: Redis.cpp:52
XtrimCompareAtLeast
@ XtrimCompareAtLeast
Definition: Redis.h:75
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:39
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:52
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:100
RedisReturnValue
RedisReturnValue
Definition: Redis.h:35
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:227
Redis::psubscribe
bool psubscribe(const char *pattern)
Definition: Redis.h:369
Redis::set
bool set(const char *key, const char *value)
Definition: Redis.cpp:27
XtrimCompareExact
@ XtrimCompareExact
Definition: Redis.h:74
Redis::rpop
String rpop(const char *key)
Definition: Redis.cpp:602
Redis::getTestContext
const void * getTestContext()
Definition: Redis.h:628
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:91
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:169