##### SUMMARY
The current implementation of CachePluginAdjudicator is unable to flush the cache without loading everything in memory using `load_whole_cache`. Iterating over the plugins cache keys would avoid that step.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
ansible.plugins.cache
CachePluginAdjudicator

##### ANSIBLE VERSION
```
ansible 2.9.6
  config file = /home/harm/dev/closso-ansible/ansible.cfg
  configured module search path = ['/home/harm/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/harm/.virtualenvs/ansible/lib/python3.7/site-packages/ansible
  executable location = /home/harm/.virtualenvs/ansible/bin/ansible
  python version = 3.7.3 (default, Apr  3 2019, 05:39:12) [GCC 8.3.0]
```

##### CONFIGURATION
```
CACHE_PLUGIN(/home/harm/dev/closso-ansible/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/home/harm/dev/closso-ansible/ansible.cfg) = ./cache/fact/
CACHE_PLUGIN_TIMEOUT(/home/harm/dev/closso-ansible/ansible.cfg) = 86400
DEFAULT_CALLBACK_PLUGIN_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/plugins/callback', '/usr/share/ansible/plugins/callback']
DEFAULT_CALLBACK_WHITELIST(/home/harm/dev/closso-ansible/ansible.cfg) = ['profile_tasks']
DEFAULT_FILTER_PLUGIN_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/plugins/filter', '/usr/share/ansible/plugins/filter']
DEFAULT_GATHERING(/home/harm/dev/closso-ansible/ansible.cfg) = smart
DEFAULT_HOST_LIST(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/netbox_inventory.yml']
DEFAULT_LOOKUP_PLUGIN_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/plugins/lookup', '/usr/share/ansible/plugins/lookup']
DEFAULT_ROLES_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/roles']
DEFAULT_VARS_PLUGIN_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/plugins/vars', '/usr/share/ansible/plugins/vars']
DOC_FRAGMENT_PLUGIN_PATH(/home/harm/dev/closso-ansible/ansible.cfg) = ['/home/harm/dev/closso-ansible/plugins/doc_fragments', '/usr/share/ansible/plugins/doc_fragments']
HOST_KEY_CHECKING(/home/harm/dev/closso-ansible/ansible.cfg) = False
INVENTORY_CACHE_ENABLED(/home/harm/dev/closso-ansible/ansible.cfg) = True
INVENTORY_ENABLED(/home/harm/dev/closso-ansible/ansible.cfg) = ['host_list', 'script', 'yaml', 'ini', 'netbox']
TRANSFORM_INVALID_GROUP_CHARS(/home/harm/dev/closso-ansible/ansible.cfg) = never
USE_PERSISTENT_CONNECTIONS(/home/harm/dev/closso-ansible/ansible.cfg) = True
```

##### STEPS TO REPRODUCE

```
>>> cache = CachePluginAdjudicator('jsonfile', _uri='./cache/netbox')
>>> cache._plugin.keys()
['netbox_b42bfs_d14a8', 'netbox_b42bfs_81f3c']
>>> cache.keys()
dict_keys([])
>>> cache.flush()
>>> cache._plugin.keys()
['netbox_b42bfs_d14a8', 'netbox_b42bfs_81f3c']
>>> cache.keys()
dict_keys([])
>>> cache.load_whole_cache()
>>> cache.keys()
dict_keys(['netbox_b42bfs_d14a8', 'netbox_b42bfs_81f3c'])
>>> cache.flush()
>>> cache.keys()
dict_keys([])
>>> cache._plugin.keys()
[]
```

##### EXPECTED RESULTS

Cache should be flushed without loading everything in memory.


##### ACTUAL RESULTS

`cache.flush()` does nothing.

self.cache['avocado'] = 'fruit'
        self.cache['daisy'] = 'flower'
        a_copy = self.cache.copy()
        self.assertEqual(type(a_copy), dict)
        self.assertEqual(a_copy, dict(avocado='fruit', daisy='flower'))
    def test_plugin_load_failure(self):
        
        
        with mock.patch('ansible.constants.CACHE_PLUGIN', 'json'):
            self.assertRaisesRegexp(AnsibleError,
                                    "Unable to load the facts cache plugin.*json.*",
                                    FactCache)
    def test_update(self):
        self.cache.update({'cache_key': {'key2': 'updatedvalue'}})
        assert self.cache['cache_key']['key2'] == 'updatedvalue'
    def test_update_legacy(self):
        self.cache.update('cache_key', {'key2': 'updatedvalue'})
        assert self.cache['cache_key']['key2'] == 'updatedvalue'
    def test_update_legacy_key_exists(self):
        self.cache['cache_key'] = {'key': 'value', 'key2': 'value2'}
        self.cache.update('cache_key', {'key': 'updatedvalue'})
        assert self.cache['cache_key']['key'] == 'updatedvalue'
        assert self.cache['cache_key']['key2'] == 'value2'
class TestAbstractClass(unittest.TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass
    def test_subclass_error(self):
        class CacheModule1(BaseCacheModule):