Redis client implementation of the WolfNinja KeyStore abstraction API
Redis implementation of the KeyStore API. This implementation uses the Jedis client library.
The most recent release is KeyStore-redis 0.1.0, released January 1, 2016. Targets KeyStore API 0.1.0
Releases are available via Maven Central: com.wolfninja.keystore:keystore-redis:0.1.0
- Group ID: com.wolfninja.keystore
- Artifact ID: keystore-redis
dependencies {
compile 'com.wolfninja.keystore:keystore-redis:0.1.0'
}
<dependency>
<groupId>com.wolfninja.keystore</groupId>
<artifactId>keystore-redis</artifactId>
<version>0.1.0</version>
</dependency>
// Set up Jedis pool with connection info
final JedisPool pool = new JedisPool("localhost", 6379);
// Optional keyspace prefix (all keyspaces key names will be prefixed with this)
// This allows the same keyspace name to be used across different backends (keeping API compatible),
// but prevent key conflict in Redis
final String keyspacePrefix = "kv_";
// Create adaptor, passing in pool (and optional keyspace prefix)
final RedisAdapter adapter = RedisAdapter.create(pool, keyspacePrefix);
final Keyspace keyspace = adapter.getKeyspace("mySpace");
// Add a key+value pair to the keyspace
assert keyspace.set("test", "Hiya buddy");
assert keyspace.set("other", "This is a different key");
//Check what we stored in redis
{
// Connect to redis, grab the keyspace we just created
// each keyspace is a separate hash (prefix + keyspace name)
final Map<String, String> hash = pool.getResource().hgetAll("kv_mySpace");
assert hash.size() == 2;
assert hash.get("test").equals("Hiya buddy");
assert hash.get("other").equals("This is a different key");
}
- Requires passing in a configured JedisPool instance to the RedisAdapter (see Usage example)
- API: This implementation supports the full API featureset
- Note: Because Redis doesn't allow locking on individual hash keys, we currently lock on the entire Keyspace when doing transactional/non-atomic operations. If the Keyspace is otherwise modified before the transaction commits, the transaction will be rolled back. Be sure to especially check the return values on these and retry if necessary. This is tracked in issue #1
- Affected methods:
- checkAndSet
- deletes
- replace
- Affected methods:
- This backend uses a Jedis pool to connect to Redis
- Each Keyspace is internally represented in Redis as a hash
- The hash name is the keyspace name (prefixed with the Keyspace prefix if provided)
- This project uses Semantic Versioning to make release versions predictable
- Versions consist of MAJOR.MINOR.PATCH
- Different MAJOR versions are not guaranteed to be API compatible
- Incrementing MINOR versions within the same MAJOR version contain additional functionality, with existing calls being compatible
- Different PATCH versions withing the same MAJOR.MINOR version are completely API compatible
- MAJOR and MINOR versions are compatible with the same API version
- master is the "stable" branch from which releases are built
- develop branch is used for active development, and merged into master at release time
See CHANGELOG.md for full history of release changes
Licenced under the MIT License (see LICENSE.txt)