NewClient creates and returns a single Redis client configured from config.App.Redis.
Connection pool parameters use go-redis defaults when set to zero, except ReadTimeout
and WriteTimeout which fall back to 60s for backward compatibility.
Shutdown gracefully closes the Redis client with a 5-second timeout.
Client.Close is always called to release the connection pool, even when
the ping fails (e.g. Redis is unreachable during shutdown).