Pools work a little bit like queues, with the exception of not being ordered. You cannot choose whether to add a value to the beginning or to the end of a pool, you just throw the value into the pool with CacheProviderRedis::poolAdd, and it stays there.

Also, when you get objects from the pool with CacheProviderRedis::poolPop, you can't choose what object you get, you just get a random one.

One benefit you get when using pools is that you can check if a certain value is in the pool by using CacheProviderRedis::isInPool, and you can also get the number of values in the pool with CacheProviderRedis::poolCount.