memcached backend: Remove tagIndex
The memcached backend implementation currenty stores this key-value "structure" to map our identifier-data-keys relation:
- identifier -> data
- identifier -> keys
- key -> identifiers
- tagIndex -> All known tags
The tagIndex doesn't have any benefit at all, it just leads to more set() and get() calls.
Completly remove tagIndex to save some operations which speeds up this backend, unit tests still show green bar.
Performance tests show that the backend speeds up between ~10 to 100% by removing the tagIndex. As an example, attached images show a test which set()'s a raising number of cache entries with a single attached tag to the backend. More numbers can be generated with ext:enetcacheanalytics (forge) in v4.
Memcache is a simple key-value store and not designed to store structures of multiple related entries. Our implementation is a misuse, which leads to corrupt caches if memcache evicts entries from cache (because it needs space for new elements), or if single servers fail in a multi server environment.