Nuxeo provides a Redis integration via the
The idea is that, at least for now, Redis is not a hard requirement for running the Nuxeo Platform; We simply use Redis as a backend to provide alternate implementation of some services inside the platform. However, we do provide these implementations because we think they can be useful.
Nuxeo Core Cache provides a service to declare and use caches. This cache system:
- is used in Nuxeo Directories (caching directories entries)
- is used in UserManager (caching principals)
- can be used in your custom code
The Cache has a default "in memory" implementation, but
nuxeo-core-redis provides a an other implementation that allows:
- To have out of JVM memory cache storage. It opens the way to have big caches without hurting the JVM.
- To share the same cache between several Nuxeo nodes. In cluster mode this can increase cache efficiency.
- To manage cluster wide invalidations. Updating the user on one node will impact the central cache: all nodes see the exact same data.
You can configure the backend storage on a per cache basis: Directory A could use Redis while directory B could use in memory.
The WorkManager handles asynchronous jobs:
- Schedule Jobs and store them in queues
- Assign execution slots to queues
- Execute the jobs
In the default implementation, job queues are in the JVM memory. But this model has some limitations:
- Stacking a lot of jobs will consume JVM Memory
- In cluster mode each Nuxeo node maintains its own queue
- When a Nuxeo server is restarted, all the queued jobs are lost
nuxeo-core-redis provides an alternate implementation of the queuing system based on Redis:
- Jobs are then stored outside of JVM memory. That's why Work have to be serializable: they are serialized and stored inside Redis.
- Jobs can be shared across cluster nodes. This allows to dedicate some nodes to some specific processing.
- Jobs survive a Nuxeo restart. When Redis persistence is activated, the jobs even survive a Redis restart.
By default Lock managed on documents are stored inside the repository backend.When the locking system is heavily used, it can create a lot of very small transactions against the database backend.
nuxeo-core-redis provides a Redis-based implementation of the locking system that is resilient as the database implementation, but easier to scale.