1 /*
2  * Hunt - A redis client library for D programming language.
3  *
4  * Copyright (C) 2018-2019 HuntLabs
5  *
6  * Website: https://www.huntlabs.net/
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11  
12 module hunt.redis.commands.RedisCommands;
13 
14 // import hunt.redis.commands.Command;
15 import hunt.collection.List;
16 import hunt.collection.Map;
17 import hunt.collection.Set;
18 
19 import hunt.redis.BitPosParams;
20 import hunt.redis.StreamEntryID;
21 import hunt.redis.GeoCoordinate;
22 import hunt.redis.GeoRadiusResponse;
23 import hunt.redis.GeoUnit;
24 import hunt.redis.ListPosition;
25 import hunt.redis.Protocol;
26 import hunt.redis.StreamPendingEntry;
27 import hunt.redis.ScanParams;
28 import hunt.redis.ScanResult;
29 import hunt.redis.SortingParams;
30 import hunt.redis.StreamEntry;
31 import hunt.redis.Tuple;
32 import hunt.redis.params.GeoRadiusParam;
33 import hunt.redis.params.SetParams;
34 import hunt.redis.params.ZAddParams;
35 import hunt.redis.params.ZIncrByParams;
36 
37 import hunt.Double;
38 import hunt.Long;
39 
40 /**
41  * Common interface for sharded and non-sharded Redis
42  */
43 interface RedisCommands {
44     string set(string key, string value);
45 
46     string set(string key, string value, SetParams params);
47 
48     string get(string key);
49 
50     bool exists(string key);
51 
52     Long persist(string key);
53 
54     string type(string key);
55 
56     const(ubyte)[] dump(string key);
57 
58     string restore(string key, int ttl, const(ubyte)[] serializedValue);
59 
60     string restoreReplace(string key, int ttl, const(ubyte)[] serializedValue);
61 
62     Long expire(string key, int seconds);
63 
64     Long pexpire(string key, long milliseconds);
65 
66     Long expireAt(string key, long unixTime);
67 
68     Long pexpireAt(string key, long millisecondsTimestamp);
69 
70     Long ttl(string key);
71 
72     Long pttl(string key);
73 
74     Long touch(string key);
75 
76     bool setbit(string key, long offset, bool value);
77 
78     bool setbit(string key, long offset, string value);
79 
80     bool getbit(string key, long offset);
81 
82     // long setrange(string key, long offset, string value);
83 
84     // string getrange(string key, long startOffset, long endOffset);
85 
86     // string getSet(string key, string value);
87 
88     // long setnx(string key, string value);
89 
90     // string setex(string key, int seconds, string value);
91 
92     // string psetex(string key, long milliseconds, string value);
93 
94     // long decrBy(string key, long decrement);
95 
96     // long decr(string key);
97 
98     // long incrBy(string key, long increment);
99 
100     // Double incrByFloat(string key, double increment);
101 
102     // long incr(string key);
103 
104     // long append(string key, string value);
105 
106     // string substr(string key, int start, int end);
107 
108     // long hset(string key, string field, string value);
109 
110     // long hset(string key, Map!(string, string) hash);
111 
112     // string hget(string key, string field);
113 
114     // long hsetnx(string key, string field, string value);
115 
116     // string hmset(string key, Map!(string, string) hash);
117 
118     // List!(string) hmget(string key, string[] fields...);
119 
120     // long hincrBy(string key, string field, long value);
121 
122     // Double hincrByFloat(string key, string field, double value);
123 
124     // bool hexists(string key, string field);
125 
126     // long hdel(string key, string[] field...);
127 
128     // long hlen(string key);
129 
130     // Set!(string) hkeys(string key);
131 
132     // List!(string) hvals(string key);
133 
134     // Map!(string, string) hgetAll(string key);
135 
136     // long rpush(string key, string[] string...);
137 
138     // long lpush(string key, string[] string...);
139 
140     // long llen(string key);
141 
142     // List!(string) lrange(string key, long start, long stop);
143 
144     // string ltrim(string key, long start, long stop);
145 
146     // string lindex(string key, long index);
147 
148     // string lset(string key, long index, string value);
149 
150     // long lrem(string key, long count, string value);
151 
152     // string lpop(string key);
153 
154     // string rpop(string key);
155 
156     // long sadd(string key, string[] member...);
157 
158     // Set!(string) smembers(string key);
159 
160     // long srem(string key, string[] member...);
161 
162     // string spop(string key);
163 
164     // Set!(string) spop(string key, long count);
165 
166     // long scard(string key);
167 
168     // bool sismember(string key, string member);
169 
170     // string srandmember(string key);
171 
172     // List!(string) srandmember(string key, int count);
173 
174     Long strlen(string key);
175 
176     // long zadd(string key, double score, string member);
177 
178     // long zadd(string key, double score, string member, ZAddParams params);
179 
180     // long zadd(string key, Map!(string, double) scoreMembers);
181 
182     // long zadd(string key, Map!(string, double) scoreMembers, ZAddParams params);
183 
184     // Set!(string) zrange(string key, long start, long stop);
185 
186     // long zrem(string key, string[] members...);
187 
188     // Double zincrby(string key, double increment, string member);
189 
190     // Double zincrby(string key, double increment, string member, ZIncrByParams params);
191 
192     // long zrank(string key, string member);
193 
194     // long zrevrank(string key, string member);
195 
196     // Set!(string) zrevrange(string key, long start, long stop);
197 
198     // Set!(Tuple) zrangeWithScores(string key, long start, long stop);
199 
200     // Set!(Tuple) zrevrangeWithScores(string key, long start, long stop);
201 
202     // long zcard(string key);
203 
204     // Double zscore(string key, string member);
205 
206     // List!(string) sort(string key);
207 
208     // List!(string) sort(string key, SortingParams sortingParameters);
209 
210     // long zcount(string key, double min, double max);
211 
212     // long zcount(string key, string min, string max);
213 
214     // Set!(string) zrangeByScore(string key, double min, double max);
215 
216     // Set!(string) zrangeByScore(string key, string min, string max);
217 
218     // Set!(string) zrevrangeByScore(string key, double max, double min);
219 
220     // Set!(string) zrangeByScore(string key, double min, double max, int offset, int count);
221 
222     // Set!(string) zrevrangeByScore(string key, string max, string min);
223 
224     // Set!(string) zrangeByScore(string key, string min, string max, int offset, int count);
225 
226     // Set!(string) zrevrangeByScore(string key, double max, double min, int offset, int count);
227 
228     // Set!(Tuple) zrangeByScoreWithScores(string key, double min, double max);
229 
230     // Set!(Tuple) zrevrangeByScoreWithScores(string key, double max, double min);
231 
232     // Set!(Tuple) zrangeByScoreWithScores(string key, double min, double max, int offset, int count);
233 
234     // Set!(string) zrevrangeByScore(string key, string max, string min, int offset, int count);
235 
236     // Set!(Tuple) zrangeByScoreWithScores(string key, string min, string max);
237 
238     // Set!(Tuple) zrevrangeByScoreWithScores(string key, string max, string min);
239 
240     // Set!(Tuple) zrangeByScoreWithScores(string key, string min, string max, int offset, int count);
241 
242     // Set!(Tuple) zrevrangeByScoreWithScores(string key, double max, double min, int offset, int count);
243 
244     // Set!(Tuple) zrevrangeByScoreWithScores(string key, string max, string min, int offset, int count);
245 
246     // long zremrangeByRank(string key, long start, long stop);
247 
248     // long zremrangeByScore(string key, double min, double max);
249 
250     // long zremrangeByScore(string key, string min, string max);
251 
252     // long zlexcount(string key, string min, string max);
253 
254     // Set!(string) zrangeByLex(string key, string min, string max);
255 
256     // Set!(string) zrangeByLex(string key, string min, string max, int offset,
257     //     int count);
258 
259     // Set!(string) zrevrangeByLex(string key, string max, string min);
260 
261     // Set!(string) zrevrangeByLex(string key, string max, string min,
262     //     int offset, int count);
263 
264     // long zremrangeByLex(string key, string min, string max);
265 
266     // long linsert(string key, ListPosition where, string pivot, string value);
267 
268     // long lpushx(string key, string[] string...);
269 
270     // long rpushx(string key, string[] string...);
271 
272     // List!(string) blpop(int timeout, string key);
273 
274     // List!(string) brpop(int timeout, string key);
275 
276     Long del(string key);
277 
278     Long unlink(string key);
279 
280     string echo(string string);
281 
282     Long move(string key, int dbIndex);
283 
284     Long bitcount(string key);
285 
286     Long bitcount(string key, long start, long end);
287 
288     // long bitpos(string key, bool value);
289 
290     // long bitpos(string key, bool value, BitPosParams params);
291 
292     // ScanResult!(MapEntry!(string, string)) hscan(string key, string cursor);
293 
294     // ScanResult!(MapEntry!(string, string)) hscan(string key, string cursor,
295     //     ScanParams params);
296 
297     // ScanResult!(string) sscan(string key, string cursor);
298 
299     // ScanResult!(Tuple) zscan(string key, string cursor);
300 
301     // ScanResult!(Tuple) zscan(string key, string cursor, ScanParams params);
302 
303     // ScanResult!(string) sscan(string key, string cursor, ScanParams params);
304 
305     Long pfadd(string key, string[] elements...);
306 
307     Long pfcount(string key);
308 
309     // // Geo Commands
310 
311     // long geoadd(string key, double longitude, double latitude, string member);
312 
313     // long geoadd(string key, Map!(string, GeoCoordinate) memberCoordinateMap);
314 
315     // Double geodist(string key, string member1, string member2);
316 
317     // Double geodist(string key, string member1, string member2, GeoUnit unit);
318 
319     // List!(string) geohash(string key, string[] members...);
320 
321     // List!(GeoCoordinate) geopos(string key, string[] members...);
322 
323     // List!(GeoRadiusResponse) georadius(string key, double longitude, double latitude, double radius,
324     //     GeoUnit unit);
325 
326     // List!(GeoRadiusResponse) georadiusReadonly(string key, double longitude, double latitude, double radius,
327     //     GeoUnit unit);
328 
329     // List!(GeoRadiusResponse) georadius(string key, double longitude, double latitude, double radius,
330     //     GeoUnit unit, GeoRadiusParam param);
331 
332     // List!(GeoRadiusResponse) georadiusReadonly(string key, double longitude, double latitude, double radius,
333     //     GeoUnit unit, GeoRadiusParam param);
334 
335     // List!(GeoRadiusResponse) georadiusByMember(string key, string member, double radius, GeoUnit unit);
336 
337     // List!(GeoRadiusResponse) georadiusByMemberReadonly(string key, string member, double radius, GeoUnit unit);
338 
339     // List!(GeoRadiusResponse) georadiusByMember(string key, string member, double radius, GeoUnit unit,
340     //     GeoRadiusParam param);
341 
342     // List!(GeoRadiusResponse) georadiusByMemberReadonly(string key, string member, double radius, GeoUnit unit,
343     //     GeoRadiusParam param);
344 
345     // /**
346     //  * Executes BITFIELD Redis command
347     //  * @param key
348     //  * @param arguments
349     //  * @return 
350     //  */
351     // List!(long) bitfield(string key, string[] arguments...);
352 
353     // /**
354     //  * Used for HSTRLEN Redis command
355     //  * @param key 
356     //  * @param field
357     //  * @return length of the value for key
358     //  */
359     // long hstrlen(string key, string field);
360 
361     // /**
362     //  * XADD key ID field string [field string ...]
363     //  * 
364     //  * @param key
365     //  * @param id
366     //  * @param hash
367     //  * @return the ID of the added entry
368     //  */
369     // StreamEntryID xadd(string key, StreamEntryID id, Map!(string, string) hash);
370 
371     // /**
372     //  * XADD key MAXLEN ~ LEN ID field string [field string ...]
373     //  * 
374     //  * @param key
375     //  * @param id
376     //  * @param hash
377     //  * @param maxLen
378     //  * @param approximateLength
379     //  * @return
380     //  */
381     // StreamEntryID xadd(string key, StreamEntryID id, Map!(string, string) hash, long maxLen, bool approximateLength);
382 
383     // /**
384     //  * XLEN key
385     //  * 
386     //  * @param key
387     //  * @return
388     //  */
389     // long xlen(string key);
390 
391     // /**
392     //  * XRANGE key start end [COUNT count]
393     //  * 
394     //  * @param key
395     //  * @param start minimum {@link StreamEntryID} for the retrieved range, passing <code>null</code> will indicate minimum ID possible in the stream  
396     //  * @param end maximum {@link StreamEntryID} for the retrieved range, passing <code>null</code> will indicate maximum ID possible in the stream
397     //  * @param count maximum number of entries returned 
398     //  * @return The entries with IDs matching the specified range. 
399     //  */
400     // List!(StreamEntry) xrange(string key, StreamEntryID start, StreamEntryID end, int count);
401 
402     // /**
403     //  * XREVRANGE key end start [COUNT <n>]
404     //  * 
405     //  * @param key
406     //  * @param start minimum {@link StreamEntryID} for the retrieved range, passing <code>null</code> will indicate minimum ID possible in the stream  
407     //  * @param end maximum {@link StreamEntryID} for the retrieved range, passing <code>null</code> will indicate maximum ID possible in the stream
408     //  * @param count The entries with IDs matching the specified range. 
409     //  * @return the entries with IDs matching the specified range, from the higher ID to the lower ID matching.
410     //  */
411     // List!(StreamEntry) xrevrange(string key, StreamEntryID end, StreamEntryID start, int count);
412         
413     // /**
414     //  * XACK key group ID [ID ...]
415     //  * 
416     //  * @param key
417     //  * @param group
418     //  * @param ids
419     //  * @return
420     //  */
421     // long xack(string key, string group,  StreamEntryID[] ids...);
422 
423     // /**
424     //  * XGROUP CREATE <key> <groupname> <id or $>
425     //  * 
426     //  * @param key
427     //  * @param groupname
428     //  * @param id
429     //  * @param makeStream
430     //  * @return
431     //  */
432     // string xgroupCreate( string key, string groupname, StreamEntryID id, bool makeStream);
433 
434     // /**
435     //  * XGROUP SETID <key> <groupname> <id or $>
436     //  * 
437     //  * @param key
438     //  * @param groupname
439     //  * @param id
440     //  * @return
441     //  */
442     // string xgroupSetID( string key, string groupname, StreamEntryID id);
443 
444     // /**
445     //  * XGROUP DESTROY <key> <groupname>
446     //  * 
447     //  * @param key
448     //  * @param groupname
449     //  * @return
450     //  */
451     // long xgroupDestroy( string key, string groupname);
452 
453     // /**
454     //  * XGROUP DELCONSUMER <key> <groupname> <consumername> 
455     //  * @param key
456     //  * @param groupname
457     //  * @param consumername
458     //  * @return
459     //  */
460     // string xgroupDelConsumer( string key, string groupname, string consumername);
461 
462     // /**
463     //  * XPENDING key group [start end count] [consumer]
464     //  * 
465     //  * @param key
466     //  * @param groupname
467     //  * @param start
468     //  * @param end
469     //  * @param count
470     //  * @param consumername
471     //  * @return
472     //  */
473     // List!(StreamPendingEntry) xpending(string key, string groupname, StreamEntryID start, StreamEntryID end, int count, string consumername);
474 
475     // /**
476     //  * XDEL key ID [ID ...]
477     //  * @param key
478     //  * @param ids
479     //  * @return
480     //  */
481     // long xdel( string key, StreamEntryID[] ids...);
482 
483     // /**
484     //  * XTRIM key MAXLEN [~] count
485     //  * @param key
486     //  * @param maxLen
487     //  * @param approximate
488     //  * @return
489     //  */
490     // long xtrim( string key, long maxLen, bool approximate);
491 
492     // /**
493     //  *  XCLAIM <key> <group> <consumer> <min-idle-time> <ID-1> <ID-2>
494     //  *        [IDLE <milliseconds>] [TIME <mstime>] [RETRYCOUNT <count>]
495     //  *        [FORCE] [JUSTID]
496     //  */        
497     // List!(StreamEntry) xclaim( string key, string group, string consumername, long minIdleTime, 
498     //     Long newIdleTime, int retries, bool force, StreamEntryID[] ids...);
499 
500 
501     // Object sendCommand(ProtocolCommand cmd, string[] args...);
502 }