Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add iodine (Ruby) Websocket server with Pub/Sub and integrated Redis client #837

Closed
wants to merge 38 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
ad6a1e7
Add iodine (Ruby) Websocket server with Pub/Sub
boazsegev Jun 25, 2017
13902d7
ARM and benchmarks pages improved.
antirez Jun 26, 2017
a4aa240
Client handling: page improved with TCP keepalive info.
antirez Jun 26, 2017
cb65db5
Pipeline page improved.
antirez Jun 26, 2017
24d3ea7
Pipelining page: add appendix on loopback interface latency.
antirez Jun 26, 2017
0e75d74
FAQ page improved.
antirez Jun 26, 2017
09d7c61
Replication doc updated.
antirez Jun 26, 2017
3f69e51
Document GEO _RO variants.
antirez Jun 30, 2017
612c6f9
Fix typos for clients handling (#838)
dguo Jul 4, 2017
f307f47
Fix issue #736: 128-bits requires 16 bytes of storage (#825)
charleswhchan Jul 4, 2017
8b0e0ec
Fixed typo in data-types-intro.md (#815)
amallia Jul 4, 2017
2d424a8
Expire only returns 0 if the key doesn't exist. (#710)
dylanahsmith Jul 4, 2017
3f1b9b5
Add iodine (Ruby) Websocket server with Pub/Sub
boazsegev Jun 25, 2017
9b125e8
redablooms is dead. long live rebloom.
mnunberg Jul 6, 2017
96f75bf
remove scala-redis-client (#842)
stephennancekivell Jul 10, 2017
67eeb14
add Regis to the list of higher-level tools (#840)
mna Jul 10, 2017
faab8bf
Add redis-timerseries to modules.json (#831)
danni-m Jul 10, 2017
d2f1915
add bredis (c++ client) (#820)
Jul 10, 2017
0191206
Fix typos in twitter-clone topic (#819)
yangshun Jul 10, 2017
478c192
update r3c introduction, add support password (#816)
jzh800 Jul 10, 2017
55bcd56
Add hiredispool.
aclisp Apr 2, 2017
2648146
Remove whitespace
badboy Jul 10, 2017
4055c47
Fix grammar in documentation for eviction polices. (#824)
charleswhchan Jul 10, 2017
2fb77c5
Update modules.json
daTokenizer May 14, 2017
595663a
add miniredis to tools.json
Apr 16, 2017
786b272
C++ redis client of acl is very efficient and stable, used by many pe…
zhengshuxin Dec 8, 2016
f17d827
Added aredis
Jan 20, 2017
8156c33
Refine explanation of MIGRATE (#796)
tevino Jul 10, 2017
64bc856
Added RcppRedis and Redux R Packages (#798)
phillc73 Jul 10, 2017
12bc7a1
Copy edits for typos/misspellings (#811)
epc Jul 10, 2017
4315e64
Grammar changes
Sdedelbrock Jul 7, 2016
1f0288c
corrent cluster-spec.md about 'Practical example of configuration epo…
spccold Jul 10, 2017
05f21f9
Adding RedisCli for language R. (#765)
cbarbu Jul 10, 2017
45f8aa1
Perl client AnyEvent::Redis::RipeRedis will continue to develop as An…
iph0 Jul 29, 2016
8e61dca
Added Perl client AnyEvent::RipeRedis::Cluster
iph0 Sep 27, 2016
1a8054d
adding entry in tools.json for noncis
reidwmulkey Apr 26, 2016
621a43c
Add iodine (Ruby) Websocket server with Pub/Sub
boazsegev Jun 25, 2017
9512dd4
Merge remote-tracking branch 'origin/patch-2' into patch-2
Jul 10, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
98 changes: 76 additions & 22 deletions clients.json
Expand Up @@ -341,12 +341,22 @@
},

{
"name": "AnyEvent::Redis::RipeRedis",
"name": "AnyEvent::RipeRedis",
"language": "Perl",
"url": "http://search.cpan.org/dist/AnyEvent-Redis-RipeRedis/",
"repository": "https://github.com/iph0/AnyEvent-Redis-RipeRedis",
"description": "Flexible non-blocking Redis client with reconnect feature",
"authors": ["iph"],
"url": "http://search.cpan.org/dist/AnyEvent-RipeRedis/",
"repository": "https://github.com/iph0/AnyEvent-RipeRedis",
"description": "Flexible non-blocking Redis client",
"authors": ["iph0"],
"active": true
},

{
"name": "AnyEvent::RipeRedis::Cluster",
"language": "Perl",
"url": "http://search.cpan.org/dist/AnyEvent-RipeRedis-Cluster/",
"repository": "https://github.com/iph0/AnyEvent-RipeRedis-Cluster",
"description": "Non-blocking Redis Cluster client",
"authors": ["iph0"],
"active": true
},

Expand Down Expand Up @@ -490,7 +500,7 @@
"description": "Async minimal redis client for tornado ioloop designed for performances (use C hiredis parser)",
"active": true
},

{
"name": "brukva",
"language": "Python",
Expand Down Expand Up @@ -558,15 +568,6 @@
"authors": ["pk11"]
},

{
"name": "scala-redis-client",
"language": "Scala",
"repository": "https://github.com/top10/scala-redis-client",
"description": "An idiomatic Scala client that keeps Jedis / Java hidden. Used in production at http://top10.com.",
"authors": ["thesmith", "heychinaski"],
"active": true
},

{
"name": "scredis",
"language": "Scala",
Expand Down Expand Up @@ -814,12 +815,12 @@
},

{
"name": "redis-client for C++",
"name": "acl-redis",
"language": "C++",
"url": "https://github.com/zhengshuxin/acl/tree/master/lib_acl_cpp/samples/redis",
"repository": "https://github.com/zhengshuxin/acl/tree/master/lib_acl_cpp/include/acl_cpp/redis",
"description": "Full Redis client commands, one redis command, one redis function",
"authors": [],
"description": "Standard C++ Redis Client with high performance and stl-like interface, supporting Redis Cluster, thread-safe",
"authors": ["zhengshuxin"],
"active": true
},

Expand Down Expand Up @@ -1048,6 +1049,14 @@
"description": "Redis client based on Finagle",
"authors": []
},
{
"name": "RedisCli",
"language": "R",
"repository": "https://bitbucket.org/cmbce/r-package-rediscli",
"description": "Basic client passing a (batch of) command(s) to redis-cli, getting back a (list of) character vector(s).",
"authors": ["CorentinBarbu"],
"active": true
},

{
"name": "rredis",
Expand Down Expand Up @@ -1285,7 +1294,7 @@
"authors": ["esilverberg"],
"active": true
},

{
"name": "Rackdis",
"language": "Racket",
Expand Down Expand Up @@ -1331,6 +1340,14 @@
"active": true
},

{
"name": "bredis",
"language": "C++",
"repository": "https://github.com/basiliscos/cpp-bredis",
"description": "Boost::ASIO low-level redis client",
"active": true
},

{
"name": "mruby-redis",
"language": "mruby",
Expand All @@ -1339,7 +1356,7 @@
"authors": ["matsumotory"],
"active": true
},

{
"name": "mruby-hiredis",
"language": "mruby",
Expand Down Expand Up @@ -1433,11 +1450,11 @@
"name": "r3c",
"language": "C++",
"repository": "https://github.com/eyjian/r3c",
"description": "A Redis Cluster C++ Client, based on hiredis and support standalone, it's easy to make and use, not depends on C++11 or later.",
"description": "Redis Cluster C++ Client, based on hiredis, support password and standalone, it's easy to make and use, not depends on C++11 or later.",
"authors": ["eyjian"],
"active": true
},

{
"name": "rebridge",
"language": "Node.js",
Expand All @@ -1456,6 +1473,14 @@
"active": true
},

{
"name": "hiredispool",
"language": "C",
"repository": "https://github.com/aclisp/hiredispool",
"description": "Provides connection pooling and auto-reconnect for hiredis. It is also minimalistic and easy to do customization.",
"active": true
},

{
"name": "oxblood",
"language": "Ruby",
Expand All @@ -1465,12 +1490,41 @@
"active": true
},

{
"name": "RcppRedis",
"language": "R",
"url": "https://cran.rstudio.com/web/packages/RcppRedis/index.html",
"repository": "https://github.com/eddelbuettel/rcppredis",
"description": "R interface to Redis using the hiredis library.",
"authors": ["eddelbuettel"],
"active": true
},

{
"name": "Redux",
"language": "R",
"url": "http://richfitz.github.io/redux/",
"repository": "https://github.com/richfitz/redux",
"description": "Provides a low-level interface to Redis, allowing execution of arbitrary Redis commands with almost no interface.",
"authors": ["rgfitzjohn"],
"active": true
},

{
"name": "oredis",
"language": "PL/SQL",
"repository": "https://github.com/SeYoungLee/oredis",
"description": "Redis client library for Oracle PL/SQL. This support Redis cluster and asynchronous execution",
"authors": ["SeyoungLee"],
"active": true
},

{
"name": "aredis",
"language": "Python",
"repository": "https://github.com/NoneGG/aredis",
"description": "An efficient and user-friendly async redis client ported from redis-py.",
"authors": [],
"active": true
}
]
2 changes: 1 addition & 1 deletion commands/command.md
Expand Up @@ -99,7 +99,7 @@ Command flags is @array-reply containing one or more status replies:

Some Redis commands have no predetermined key locations. For those commands,
flag `movablekeys` is added to the command flags @array-reply. Your Redis
Cluster client needs to parse commands marked `movabkeleys` to locate all relevant key positions.
Cluster client needs to parse commands marked `movablekeys` to locate all relevant key positions.

Complete list of commands currently requiring key location parsing:

Expand Down
4 changes: 3 additions & 1 deletion commands/expire.md
Expand Up @@ -46,12 +46,14 @@ command altering its value had the effect of removing the key entirely.
This semantics was needed because of limitations in the replication layer that
are now fixed.

`EXPIRE` would return 0 and not alter the timeout for a key with a timeout set.

@return

@integer-reply, specifically:

* `1` if the timeout was set.
* `0` if `key` does not exist or the timeout could not be set.
* `0` if `key` does not exist.

@examples

Expand Down
2 changes: 1 addition & 1 deletion commands/expireat.md
Expand Up @@ -20,7 +20,7 @@ a given time in the future.
@integer-reply, specifically:

* `1` if the timeout was set.
* `0` if `key` does not exist or the timeout could not be set (see: `EXPIRE`).
* `0` if `key` does not exist.

@examples

Expand Down
10 changes: 10 additions & 0 deletions commands/georadius.md
@@ -1,5 +1,7 @@
Return the members of a sorted set populated with geospatial information using `GEOADD`, which are within the borders of the area specified with the center location and the maximum distance from the center (the radius).

This manual page also covers the `GEORADIUS_RO` and `GEORADIUSBYRANGE_RO` variants (see the section below for more information).

The common use case for this command is to retrieve geospatial items near a specified point and no far than a given amount of meters (or other units). This allows, for example, to suggest mobile users of an application nearby places.

The radius is specified in one of the following units:
Expand Down Expand Up @@ -39,6 +41,14 @@ So for example the command `GEORADIUS Sicily 15 37 200 km WITHCOORD WITHDIST` wi

["Palermo","190.4424",["13.361389338970184","38.115556395496299"]]

## Read only variants

Since `GEORADIUS` and `GEORADIUSBYMEMBER` have a `STORE` and `STOREDIST` option they are technically flagged as writing commands in the Redis command table. For this reason read-only slaves will flag them, and Redis Cluster slaves will redirect them to the master instance even if the connection is in read only mode (See the `READONLY` command of Redis Cluster).

Breaking the compatibility with the past was considered but rejected, at least for Redis 4.0, so instead two read only variants of the commands were added. They are exactly like the original commands but refuse the `STORE` and `STOREDIST` options. The two variants are called `GEORADIUS_RO` and `GEORADIUSBYMEMBER_RO`, and can safely be used in slaves.

Both commands were introduced in Redis 3.2.10 and Redis 4.0.0 respectively.

@examples

```cli
Expand Down
2 changes: 2 additions & 0 deletions commands/georadiusbymember.md
Expand Up @@ -5,6 +5,8 @@ The position of the specified member is used as the center of the query.

Please check the example below and the `GEORADIUS` documentation for more information about the command and its options.

Note that `GEORADIUSBYMEMBER_RO` is also available since Redis 3.2.10 and Redis 4.0.0 in order to provide a read-only command that can be used in slaves. See the `GEORADIUS` page for more information.

@examples

```cli
Expand Down
2 changes: 1 addition & 1 deletion commands/pexpire.md
Expand Up @@ -6,7 +6,7 @@ specified in milliseconds instead of seconds.
@integer-reply, specifically:

* `1` if the timeout was set.
* `0` if `key` does not exist or the timeout could not be set.
* `0` if `key` does not exist.

@examples

Expand Down
2 changes: 1 addition & 1 deletion commands/pexpireat.md
Expand Up @@ -6,7 +6,7 @@ which the key will expire is specified in milliseconds instead of seconds.
@integer-reply, specifically:

* `1` if the timeout was set.
* `0` if `key` does not exist or the timeout could not be set (see: `EXPIRE`).
* `0` if `key` does not exist.

@examples

Expand Down
38 changes: 33 additions & 5 deletions modules.json
Expand Up @@ -81,12 +81,12 @@
},

{
"name": "redablooms",
"name": "rebloom",
"license" : "AGPL",
"repository": "https://github.com/RedisLabsModules/redablooms",
"description": "Scalable, counting Bloom filters",
"authors": ["itamarhaber", "RedisLabs"],
"stars": 15
"repository": "https://github.com/RedisLabsModules/rebloom",
"description": "Scalable Bloom filters",
"authors": ["mnunberg", "RedisLabs"],
"stars": 6
},

{
Expand All @@ -96,5 +96,33 @@
"description": "Online trainable neural networks as Redis data types.",
"authors": ["antirez"],
"stars": 1854
},

{
"name": "redis-timerseries",
"license" : "AGPL",
"repository": "https://github.com/danni-m/redis-timeseries",
"description": "Time-series data structure for redis",
"authors": ["danni-m"],
"stars": 48
},

{
"name": "ReDe",
"license" : "MIT",
"repository": "https://github.com/TamarLabs/ReDe",
"description": "Low Latancy timed queues (Dehydrators) as Redis data types.",
"authors": ["daTokenizer"],
"stars": 6
},

{
"name": "commentDis",
"license" : "MIT",
"repository": "https://github.com/picotera/commentDis",
"description": "Add comment syntax to your redis-cli scripts.",
"authors": ["daTokenizer"],
"stars": 1
}

]
28 changes: 28 additions & 0 deletions tools.json
Expand Up @@ -597,5 +597,33 @@
"repository": "https://github.com/vipshop/redis-migrate-tool",
"description": "A convenient and useful tool for migrating data between redis groups.",
"authors": ["diguo58"]
},
{
"name": "iodine",
"language": "Ruby",
"repository": "https://github.com/boazsegev/iodine",
"description": "Iodine is an HTTP / Websocket server with native pub/sub support. Iodine includes an integrated Redis client that provides Pub/Sub scaling beyond machine boundaries.",
"authors": ["bowildmusic"]
},
{
"name": "Regis",
"language": "Swift",
"url": "https://www.harfangapps.com/regis/",
"description": "Full-featured Redis client for the Mac, available on the Mac App Store.",
"authors": ["harfangapps"]
},
{
"name": "miniredis",
"language": "Go",
"repository": "https://github.com/alicebob/miniredis",
"description": "Pure Go Redis server for Go unittests",
"authors": []
},
{
"name": "noncis",
"language": "Javascript",
"repository": "https://github.com/reidwmulkey/noncis",
"description": "Synchronizes nonces across node instances.",
"authors": []
}
]
8 changes: 4 additions & 4 deletions topics/ARM.md
@@ -1,8 +1,8 @@
# Redis on ARM

Since the Redis 4.0 version (currently in release candidate state) Redis
supports the ARM processor, and the Raspberry Pi, as a main
platform, exactly like it happens for Linux/x86. It means that every new
supports the ARM processor in general, and the Raspberry Pi specifically, as a
main platform, exactly like it happens for Linux/x86. It means that every new
release of Redis is tested on the Pi environment, and that we take
this documentation page updated with information about supported devices
and information. While Redis already runs on Android, in the future we look
Expand Down Expand Up @@ -35,13 +35,13 @@ run as expected.
There is nothing special in the process. The only difference is that by
default, Redis uses the libc allocator instead of defaulting to Jemalloc
as it does in other Linux based environments. This is because we believe
that for the small use cases inside embeddeed devices, memory fragmentation
that for the small use cases inside embedded devices, memory fragmentation
is unlikely to be a problem. Moreover Jemalloc on ARM may not be as tested
as the libc allocator.

## Performance

Performance testing of Redis was performend in the Raspberry Pi 3 and in the
Performance testing of Redis was performed in the Raspberry Pi 3 and in the
original model B Pi. The difference between the two Pis in terms of
delivered performance is quite big. The benchmarks were performed via the
loopback interface, since most use cases will probably use Redis from within
Expand Down