public T Cache <T>(IRedisCommand <T> command, Func <T> miss)
        {
            if (!factory.IsEnabled)
            {
                return(miss());
            }

            using (var connection = factory.Open())
            {
                if (connection.IsPassThrough)
                {
                    return(miss());
                }

                if (command.Get(connection, out T item))
                {
                    return(item);
                }

                item = miss();
                command.Set(connection, item);

                return(item);
            }
        }