Issue:
[BUG] panic on RedisPoolConnection close.

### Bug Description

Currently the RedisPoolConnection close panics on [this line](https://github.com/juspay/hyperswitch/blob/ed99655ebc11d53f4b2ffcb8c0eb9ef6b56f32c4/crates/router/src/bin/router.rs#L47). The root cause of this issue is `Arc::get_mut` throws None when `Arc` has 2 or more strong immutable reference. Since we are creating async tasks with reference to `Arc<RedisConnectionPool>` [here](https://github.com/juspay/hyperswitch/blob/ed99655ebc11d53f4b2ffcb8c0eb9ef6b56f32c4/crates/router/src/services.rs#L110).

### Expected Behavior

Runs successfully and closes the connection to redis and db connection.

### Actual Behavior

```text
thread 'main' panicked at 'Redis connection pool cannot be closed', crates/router/src/db.rs:74:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
```

### Steps To Reproduce

1. Run `cargo r`
2.  Stop it with `CTRL+C` 
3. You will get:

   ```text
   thread 'main' panicked at 'Redis connection pool cannot be closed', crates/router/src/db.rs:74:14
   note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
   ```

### Possible Resolution

Possible resolution would be removing `&mut self` from close function. Since `redis.quit_pool` doesn't really need mutable reference. Other one would be something like.
```rust
impl Drop for RedisConnectionPool {
	fn drop(self) {
		tokio_rt.block(async {
			// call to the function that closes the connections
		})
	}
}
```

### Environment

Are you using hyperswitch hosted version? No

If not (or if building/running locally), please provide the following details:
1. Operating System or Linux distribution: MacOS
2. Rust version (output of `rustc --version`): ``1.69
3. App version (output of `cargo r -- --version`): ``0.5.9


### Have you spent some time to check if this bug has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

None

Resolution:
<think>
PR Context:
- Title: fix: impl `Drop` for `RedisConnectionPool`
- Merged: 2023-05-04T15:00:18Z
- Files changed: 8 files
- Commits: 2 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->
- [x] Bugfix

## Description
<!-- Describe your changes in detail -->
This fixes #1035 

## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless its an obvious bug or documentation fix
that will have little conversa
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** fix: impl `Drop` for `RedisConnectionPool` (#1051)
Files to modify:


**crates/drainer/src/main.rs**
  Modify existing code

**crates/drainer/src/services.rs**
  Remove:
    - function: pub::close

**crates/redis_interface/src/lib.rs**
  Add:
    - function: private::drop
    - impl: impl Drop for RedisConnectionPool

**crates/router/src/bin/router.rs**
  Modify existing code

**crates/router/src/bin/scheduler.rs**
  Modify existing code

**crates/router/src/db.rs**
  Remove:
    - function: private::close
    - function: private::close
    - function: private::close
    - impl: impl StorageInterface for Store
    - impl: impl StorageInterface for MockDb
  Add:
    - impl: impl StorageInterface for Store
    - impl: impl StorageInterface for MockDb

**crates/router/src/lib.rs**
  Modify existing code

**crates/router/tests/utils.rs**
  Modify existing code