IGNITE-3066: Review, 5th round.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisCommandHandler.java
index 16c3f3e..2e2a048 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisCommandHandler.java
@@ -29,11 +29,11 @@
     /**
      * @return Collection of supported commands.
      */
-    Collection<GridRedisCommand> supportedCommands();
+    public Collection<GridRedisCommand> supportedCommands();
 
     /**
      * @param msg Request message.
      * @return Future.
      */
-    IgniteInternalFuture<GridRedisMessage> handleAsync(GridRedisMessage msg);
+    public IgniteInternalFuture<GridRedisMessage> handleAsync(GridRedisMessage msg);
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisRestCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisRestCommandHandler.java
index d22e00e..696fea5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisRestCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/GridRedisRestCommandHandler.java
@@ -66,7 +66,7 @@
                         if (restRes.getSuccessStatus() == GridRestResponse.STATUS_SUCCESS)
                             msg.setResponse(makeResponse(restRes, msg.auxMKeys()));
                         else
-                            msg.setResponse(GridRedisProtocolParser.toGenericError("Operation error!"));
+                            msg.setResponse(GridRedisProtocolParser.toGenericError("Operation error"));
 
                         return msg;
                     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
index c7f1eca..a46f0f6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisAppendCommandHandler.java
@@ -65,7 +65,7 @@
         assert msg != null;
 
         if (msg.messageSize() < 3)
-            throw new GridRedisGenericException("Wrong syntax!");
+            throw new GridRedisGenericException("Wrong syntax");
 
         GridRestCacheRequest appendReq = new GridRestCacheRequest();
         GridRestCacheRequest getReq = new GridRestCacheRequest();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
index c70c26c..a0aaf37 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetRangeCommandHandler.java
@@ -91,8 +91,8 @@
                 endOffset = boundedEndOffset(Integer.parseInt(params.get(END_OFFSET_POS)), res.length());
             }
             catch (NumberFormatException e) {
-                U.error(log, "Erroneous offset!", e);
-                return GridRedisProtocolParser.toGenericError("Offset is not an integer!");
+                U.error(log, "Erroneous offset", e);
+                return GridRedisProtocolParser.toGenericError("Offset is not an integer");
             }
 
             return GridRedisProtocolParser.toBulkString(res.substring(startOffset, endOffset));
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
index c9eda14..9e705162 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisGetSetCommandHandler.java
@@ -63,7 +63,7 @@
         assert msg != null;
 
         if (msg.messageSize() < 3)
-            throw new GridRedisGenericException("Wrong syntax!");
+            throw new GridRedisGenericException("Wrong syntax");
 
         GridRestCacheRequest restReq = new GridRestCacheRequest();
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
index 5870951..219768b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisIncrDecrCommandHandler.java
@@ -81,14 +81,13 @@
 
         GridRestResponse getResp = hnd.handle(getReq);
 
-        if (getResp.getResponse() == null) {
+        if (getResp.getResponse() == null)
             restReq.initial(0L);
-        }
         else {
             if (getResp.getResponse() instanceof Long && (Long)getResp.getResponse() <= Long.MAX_VALUE)
                 restReq.initial((Long)getResp.getResponse());
             else
-                throw new GridRedisGenericException("An initial value must be numeric and in range!");
+                throw new GridRedisGenericException("An initial value must be numeric and in range");
         }
 
         restReq.clientId(msg.clientId());
@@ -100,8 +99,8 @@
                 restReq.delta(Long.valueOf(msg.aux(DELTA_POS)));
             }
             catch (NumberFormatException e) {
-                U.error(log, "Wrong increment delta!", e);
-                throw new GridRedisGenericException("An increment value must be numeric and in range!");
+                U.error(log, "Wrong increment delta", e);
+                throw new GridRedisGenericException("An increment value must be numeric and in range");
             }
         }
 
@@ -116,7 +115,7 @@
                 restReq.command(ATOMIC_DECREMENT);
                 break;
             default:
-                assert false : "Unexpected command received!";
+                assert false : "Unexpected command received";
         }
 
         return restReq;
@@ -125,11 +124,11 @@
     /** {@inheritDoc} */
     @Override public ByteBuffer makeResponse(final GridRestResponse restRes, List<String> params) {
         if (restRes.getResponse() == null)
-            return GridRedisProtocolParser.toGenericError("Failed to increment!");
+            return GridRedisProtocolParser.toGenericError("Failed to increment");
 
         if (restRes.getResponse() instanceof Long && (Long)restRes.getResponse() <= Long.MAX_VALUE)
             return GridRedisProtocolParser.toInteger(String.valueOf(restRes.getResponse()));
         else
-            return GridRedisProtocolParser.toTypeError("Value is non-numeric or out of range!");
+            return GridRedisProtocolParser.toTypeError("Value is non-numeric or out of range");
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
index a37423c..8eb0b3f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetCommandHandler.java
@@ -25,6 +25,7 @@
 import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler;
 import org.apache.ignite.internal.processors.rest.GridRestResponse;
 import org.apache.ignite.internal.processors.rest.handlers.redis.GridRedisRestCommandHandler;
+import org.apache.ignite.internal.processors.rest.handlers.redis.exception.GridRedisGenericException;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisCommand;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisMessage;
 import org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisProtocolParser;
@@ -73,7 +74,7 @@
         restReq.command(CACHE_PUT);
 
         if (msg.messageSize() < 3)
-            throw new IgniteCheckedException("Invalid request!");
+            throw new GridRedisGenericException("Wrong number of arguments");
 
         restReq.value(msg.aux(VAL_POS));
 
@@ -89,7 +90,7 @@
             else if (isXx(params))
                 restReq.command(CACHE_REPLACE);
 
-            // TODO: handle expiration options.
+            // TODO: IGNITE-4226, handle expiration options.
         }
 
         return restReq;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
index e1c1e4c..40244c8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/redis/string/GridRedisSetRangeCommandHandler.java
@@ -77,8 +77,8 @@
             off = Integer.parseInt(msg.aux(OFFSET_POS));
         }
         catch (NumberFormatException e) {
-            U.error(log, "Erroneous offset!", e);
-            throw new GridRedisGenericException("Offset is not an integer!");
+            U.error(log, "Erroneous offset", e);
+            throw new GridRedisGenericException("Offset is not an integer");
         }
 
         String val = String.valueOf(msg.aux(VAL_POS));
@@ -96,7 +96,7 @@
 
         int totalLen = off + val.length();
         if (off < 0 || totalLen > MAX_OFFSET)
-            throw new GridRedisGenericException("Offset is out of range!");
+            throw new GridRedisGenericException("Offset is out of range");
 
         GridRestCacheRequest putReq = new GridRestCacheRequest();
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisMessage.java
index 80c5ffb..367d785 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisMessage.java
@@ -23,6 +23,7 @@
 import java.util.UUID;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
+import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -65,6 +66,11 @@
         msgParts = new ArrayList<>(msgLen);
     }
 
+    /**
+     * Appends the specified part to the message.
+     *
+     * @param part Part to append.
+     */
     public void append(String part) {
         msgParts.add(part);
     }
@@ -150,8 +156,9 @@
         return msgParts.subList(KEY_POS, msgParts.size());
     }
 
+    /** {@inheritDoc} */
     @Override public String toString() {
-        return "GridRedisMessage [msg: " + msgParts + "]";
+        return S.toString(GridRedisMessage.class, this);
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisProtocolParser.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisProtocolParser.java
index 704ae0e..85fad39 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisProtocolParser.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/protocols/tcp/redis/GridRedisProtocolParser.java
@@ -304,9 +304,8 @@
         buf.put(arrSize);
         buf.put(CRLF);
 
-        for (Object val : vals) {
+        for (Object val : vals)
             buf.put(toBulkString(val));
-        }
 
         buf.flip();