@Override
	public Page<T> findAll(Pageable pageable) {
		Assert.isNull(pageable.getSort(), "Arbitrary sorting is not implemented");
		long count = zSetOperations.size();
		// redis in inclusive on right side, hence -1
		long to = Math.min(count, pageable.getOffset() + pageable.getPageSize()) - 1;

		// But -1 means start from end, so cater for that
		Set<String> redisKeys = (to == -1) ? Collections.<String> emptySet() : zSetOperations.range(
				pageable.getOffset(), to);
		Iterator<String> keysIt = redisKeys.iterator();

		List<T> result = new ArrayList<T>(redisKeys.size());
		List<String> values = redisOperations.opsForValue().multiGet(redisKeys);
		for (String v : values) {
			result.add(deserialize(idFromRedisKey(keysIt.next()), v));
		}
		return new PageImpl<T>(result, pageable, count);
	}
Base implementation for a store, using Redis behind the scenes. This implementation requires a {@code repoPrefix},
that is used in two ways:
<ul>
<li>a sorted set is stored under that exact key that tracks the entity ids this repository is responsible for,
<li>
<li>each entity is stored serialized under key {@code repoPrefix.<id>}</li>
</ul>

@param <T> the type of things to store
@param <ID> a "primary key" to the things
@author Eric Bottard
spring-xd-analytics/src/main/java/org/springframework/xd/store/AbstractRedisRepository.java