¿Hay una alternativa de Java incrustable a Redis?


Answers

Hazelcast proporciona varias implementaciones de estructura de datos distribuidos que se pueden usar como una alternativa pura de Java a los servicios de Redis. A continuación, puede enviar un solo "jar" con todas las dependencias necesarias para ejecutar su aplicación. Puede que tenga que ajustar las primitivas ligeramente diferentes relativas a Redis en su propia aplicación.

Las soluciones comerciales en este espacio incluyen Enterprise Ehcache de Teracotta y Oracle Coherence .

Question

De acuerdo con este hilo , Jedis es lo mejor para usar si quiero usar Redis de Java.

Sin embargo, me preguntaba si hay bibliotecas / paquetes que proporcionen operaciones de conjunto igualmente eficientes a las que ya existen en Redis, pero que pueden integrarse directamente en una aplicación Java sin la necesidad de configurar servidores separados. (es decir, usando Jetty para el servidor web).

Para ser más precisos, me gustaría poder hacer lo siguiente de manera eficiente:

  1. Hay un gran conjunto de usuarios de M (M no se conoce de antemano).
  2. Hay un gran conjunto de N elementos.
  3. Queremos que los usuarios examinen elementos, un usuario / elemento a la vez, que produce un resultado almacenado (en una base de datos normal).
  4. Cada vez que llega un usuario, queremos asignar a ese usuario el elemento con la menor cantidad de resultados existentes que el usuario no haya visto antes. Esto produce una asignación aproximada de todos los usuarios que llegan, cuando nos preocupamos de que todos los artículos se vean aproximadamente el mismo número de veces.

Lo anterior sucede de forma paralela. Cuando M y N son grandes, Redis logra lo anterior de manera mucho más eficiente que las consultas SQL. ¿Hay alguna forma de hacerlo utilizando una biblioteca embebida de Java que sea un poco más liviana que iniciar un servidor Redis?

Reconozco que es posible escribir un montón de código usando las bibliotecas de concurrencia de Java que se aproximarían a esto (y hasta cierto punto, lo he hecho), pero eso no es exactamente lo que estoy buscando aquí.




La Biblioteca de guayaba de Google proporciona versiones amigables de los mismos (y más) operadores de conjuntos que proporciona redis.

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

p.ej

    Guava                     Redis
    Sets.intersection(a,b)    sinter a b
    a.count()                 scard a
    Sets.difference(a,b)      sdiff a b
    Sets.union(a,b)           sunion a b

Los multisectos son un proxy razonablemente directo para los conjuntos clasificados de redis también.




Related