blob: db37b55e7b32a85b5030bdb3f259a5d9f73f39ea [file] [log] [blame]
<!--
▄▄▄ ██▓███ ▄▄▄ ▄████▄ ██░ ██ ▓█████ ██▓ ▄████ ███▄ █ ██▓▄▄▄█████▓▓█████
▒████▄ ▓██░ ██▒▒████▄ ▒██▀ ▀█ ▓██░ ██▒▓█ ▀ ▓██▒ ██▒ ▀█▒ ██ ▀█ █ ▓██▒▓ ██▒ ▓▒▓█ ▀
▒██ ▀█▄ ▓██░ ██▓▒▒██ ▀█▄ ▒▓█ ▄ ▒██▀▀██░▒███ ▒██▒▒██░▄▄▄░▓██ ▀█ ██▒▒██▒▒ ▓██░ ▒░▒███
░██▄▄▄▄██ ▒██▄█▓▒ ▒░██▄▄▄▄██ ▒▓▓▄ ▄██▒░▓█ ░██ ▒▓█ ▄ ░██░░▓█ ██▓▓██▒ ▐▌██▒░██░░ ▓██▓ ░ ▒▓█ ▄
▓█ ▓██▒▒██▒ ░ ░ ▓█ ▓██▒▒ ▓███▀ ░░▓█▒░██▓░▒████▒ ░██░░▒▓███▀▒▒██░ ▓██░░██░ ▒██▒ ░ ░▒████▒
▒▒ ▓▒█░▒▓▒░ ░ ░ ▒▒ ▓▒█░░ ░▒ ▒ ░ ▒ ░░▒░▒░░ ▒░ ░ ░▓ ░▒ ▒ ░ ▒░ ▒ ▒ ░▓ ▒ ░░ ░░ ▒░ ░
▒ ▒▒ ░░▒ ░ ▒ ▒▒ ░ ░ ▒ ▒ ░▒░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░░ ░ ▒░ ▒ ░ ░ ░ ░ ░
░ ▒ ░░ ░ ▒ ░ ░ ░░ ░ ░ ▒ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
-->
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apache Ignite vs Redis</title>
<link media="all" rel="stylesheet" href="/css/all.css">
<link href="https://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.css" rel="stylesheet">
<link media="all" rel="stylesheet" href="/css/syntaxhighlighter.css">
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,300,300italic,400italic,600,600italic,700,700italic,800,800italic' rel='stylesheet' type='text/css'>
<!--#include virtual="/includes/sh.html" -->
</head>
<body>
<div id="wrapper">
<!--#include virtual="/includes/header.html" -->
<main id="main" role="main" class="container">
<section id="redis-replacement" class="usecase-page-section">
<h2 class="first">Ignite vs Redis</h2>
<p>
Both, Apache Ignite and Redis provide distributed caching functionality, but the features supported
by either product are very different. Redis is mainly a data structure store, while Ignite fabric
provides many in-memory distributed components including data grid, compute grid,
streaming, and also data structures.
</p>
<p>
Given that Ignite is an in-memory data fabric and offers more functionality, a complete
feature-by-feature comparison is not really relevant, while we can still compare some
individual data grid features.
</p>
</section>
<section id="comparison">
<table class="formatted" name="Feature Comparison Apache Ignite vs Redis">
<thead>
<tr>
<th style="text-align: center;font-size: larger">Apache Ignite</th>
<th style="text-align: center;font-size: larger">Redis</th>
</tr>
</thead>
<tbody>
<tr><td colspan="2" style="text-align: center"><b>JCache (JSR 107)</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite is fully compliant with <i><nobr>JCache (JSR 107)</nobr></i> specification for caching.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not implement <i><nobr>JCache (JSR 107)</nobr></i> specification for caching.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>ACID Transactions</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite has full support for ACID transactions, including OPTIMISTIC and PESSIMISTIC
concurrency modes, as well as READ_COMMITTED, REPEATABLE_READ, and SERIALIZABLE isolation
levels.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis provides very limited support for client-side OPTIMISTIC transactions.
In case of concurrent update, clients are required to manually retry a transaction.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Data Partitioning</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite supports <i>PARTITIONED</i> caches which is similar to a distributed hash map
with every node in the cluster responsible only for a portion of the data.
Ignite will automatically rebalance the data in case of topology changes.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not provide partitioning, but it provides sharding with replicas.
Working with shards is more rigid and almost always requires a set of fairly involved
manual steps on both, clients and servers, every time a topology changes.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Full Replication</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite has support for <i>REPLICATED</i> caches where every key-value pair is
replicated on every node in the cluster.
</td>
<td width="50%" valign="top">
<p>
Redis does not have direct support for full replication.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Native Objects</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite allows users to use their own domain object model and provides native support
for any Java/Scala, C++, and .NET/C# data types (objects). Users are free to store any
application and domain object in Ignite caches.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not allow users to work with their own data types and only supports the
predefined set of primitive data structures, such as sets, lists, arrays, and some others.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Client-side (Near) Caching</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite provides direct support for client-side caching for most recently accessed data.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not provide support for client-side caching.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Collocated (server-side) Processing</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite allows executing any native Java, C++, and .NET/C# code directly on the server-side,
close to the data, in collocated fashion.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis generally does not have any collocated processing and allows primitive server-side
code execution only with LUA scripting language. There is no direct support for Java,
.NET, or C++ on the server side.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>SQL Queries</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite supports complete SQL (ANSI-99) syntax for querying in-memory data.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not have any query language and only supports client-side caching API.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Continuous Queries</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite provides direct support for client-side and server-side continuous queries.
Users can setup server-side filters to reduce and narrow down the amount of events sent
to clients.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis provides support for client-side key-based event notifications. However, it does not
allow to provide server-side filters, hence causing a significant network traffic for
update notifications between servers and clients.
</p>
</td>
</tr>
<tr><td colspan="2" style="text-align: center"><b>Database Integration</b></td></tr>
<tr>
<td width="50%" valign="top">
<p>
Ignite can automatically integrate with external databases - RDBMS, NoSQL, and HDFS.
</p>
</td>
<td width="50%" valign="top">
<p>
Redis does not integrate with external databases.
</p>
</td>
</tr>
</tbody>
</table>
</section>
</main>
<!--#include virtual="/includes/footer.html" -->
</div>
<!--#include virtual="/includes/scripts.html" -->
</body>
</html>