/** * = Vert.x-redis * :toc: left * * Vert.x-redis is redis client to be used with Vert.x. * * This module allows data to be saved, retrieved, searched for, and deleted in a Redis. Redis is an open source, BSD * licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain * strings, hashes, lists, sets and sorted sets. To use this module you must have a Redis server instance running on * your network. * * Redis has a rich API and it can be organized in the following groups: * * * Cluster - Commands related to cluster management, note that using most of these commands you will need a redis server with version >=3.0.0 * * Connection - Commands that allow you to switch DBs, connect, disconnect and authenticate to a server. * * Hashes - Commands that allow operations on hashes. * * HyperLogLog - Commands to approximating the number of distinct elements in a multiset, a HyperLogLog. * * Keys - Commands to work with Keys. * * List - Commands to work with Lists. * * Pub/Sub - Commands to create queues and pub/sub clients. * * Scripting - Commands to run Lua Scripts in redis. * * Server - Commands to manage and get server configurations. * * Sets - Commands to work with un ordered sets. * * Sorted Sets - Commands to work with sorted sets. * * Strings - Commands to work with Strings. * * Transactions - Commands to handle transaction lifecycle. * * == Using Vert.x-Redis * * To use the Vert.x Redis client, add the following dependency to the _dependencies_ section of your build descriptor: * * * Maven (in your `pom.xml`): * * [source,xml,subs="+attributes"] * ---- * <dependency> * <groupId>${maven.groupId}</groupId> * <artifactId>${maven.artifactId}</artifactId> * <version>${maven.version}</version> * </dependency> * ---- * * * Gradle (in your `build.gradle` file): * * [source,groovy,subs="+attributes"] * ---- * compile '${maven.groupId}:${maven.artifactId}:${maven.version}' * ---- * * == Connecting to Redis * * In order to connect to Redis there is a config required. This config is provided in the form of {@link io.vertx.redis.RedisOptions} * containing the following values: * * * `host`: default is `localhost` * * `port`: default is `6379` * * `encoding`: default is `UTF-8` * * `tcpKeepAlive`: default `true` * * `tcpNoDelay`: default `true` * * An connection example can then be: * * [source,$lang] * ---- * {@link examples.Examples#example1} * ---- * * The client attempts to reconnect to the server on connection errors, for this reason if you are connecting to a server * that requires authentication and/or you are not using the default database you must provide the authentication * password and/or database id to the config object, the properties names are: * * * `auth` * * `select` * * If you do not do this and manually call the {@link io.vertx.redis.RedisClient#auth(java.lang.String, io.vertx.core.Handler)} * or {@link io.vertx.redis.RedisClient#select(int, io.vertx.core.Handler)} then the client will not know how to recover * the connection in case of socket error. * * == Running commands * * Given that the redis client is connected to the server, all commands are now possible to execute using this module. * The module offers a clean API for executing commands without the need to hand write the command itself, for example * if one wants to get a value of a key it can be done as: * * [source,$lang] * ---- * {@link examples.Examples#example2} * ---- * * In order to know more about the commands available you should look at: <a href="http://redis.io/commands">redis documentation</a>. * * == Pub/Sub mode * * Redis supports queues and pub/sub mode, when operated in this mode once a connection invokes a subscriber mode then * it cannot be used for running other commands than the command to leave that mode. * * To start a subscriber one would do: * * [source,$lang] * ---- * {@link examples.Examples#example3} * ---- * * And from another place in the code publish messages to the queue: * * [source,$lang] * ---- * {@link examples.Examples#example4} * ---- * * == Friendlier hash commands * * Most Redis commands take a single String or an Array of Strings as arguments, and replies are sent back as a single * String or an Array of Strings. When dealing with hash values, there are a couple of useful exceptions to this. * * === Command hgetall * * The reply from an hgetall command will be converted into a JSON Object. That way you can interact with the responses * using JSON syntax which is handy for the EventBus communication. * * === command mset * * Multiple values in a hash can be set by supplying an object. Note however that key and value will be coerced to * strings. * * ---- * { * keyName: "value", * otherKeyName: "other value" * } * ---- * * === command msetnx * * Multiple values in a hash can be set by supplying an object. Note however that key and value will be coerced to * strings. * * ---- * { * keyName: "value", * otherKeyName: "other value" * } * ---- * * === command hmset * * Multiple values in a hash can be set by supplying an object. Note however that key and value will be coerced to * strings. * * ---- * { * keyName: "value", * otherKeyName: "other value" * } * ---- * * === command zadd * Multiple values in a hash can be set by supplying an object. Note however that key and value will be coerced to * strings. * * ---- * { * score: "member", * otherScore: "other member" * } * ---- * * == Server Info * * In order to make it easier to work with the info response you don't need to parse the data yourself and the module * will return it in a easy to understand JSON format. The format is as follows: A JSON object for each section filled * with properties that belong to that section. If for some reason there is no section the properties will be visible * at the top level object. * * ---- * { * server: { * redis_version: "2.5.13", * redis_git_sha1: "2812b945", * redis_git_dirty: "0", * os: "Linux 2.6.32.16-linode28 i686", * arch_bits: "32", * multiplexing_api: "epoll", * gcc_version: "4.4.1", * process_id: "8107", * ... * }, * memory: {...}, * client: {...}, * ... * } * ---- * * == Eval and Evalsha * * Eval and Evalsha commands are special due to its return value can be any type. Vert.x is built on top of Java and the * language adheres to strong typing so returning any type turns to be problematic since we want to avoid having `Object` * type being used. The reason to avoid the type `Object` is that we also are polyglot and the conversion between * languages would become rather complicated and hard to implement. For all these reasons the commands eval and evalsha * will always return a JsonArray, even for example for scripts such as: * * ``` * return 10 * ``` * * In this case the return value will be a json array with the value 10 on index 0. * */ @ModuleGen(name = "vertx-redis", groupPackage = "io.vertx") @Document(fileName = "index.adoc") package io.vertx.redis; import io.vertx.codegen.annotations.ModuleGen; import io.vertx.docgen.Document;