```python
from typing import Dict, List

def new_cache(limit: int) -> Dict[str, int]:
    if not isinstance(limit, int) or limit <= 0:
        raise ValueError("Limit must be a positive integer")
    return {
        "limit": limit,
        "keys": [],
        "store": {}
    }

def cache_write(cache: Dict[str, int], key: str, value: int) -> List[str]:
    if not isinstance(key, str) or not key:
        raise ValueError("Key must be a non-empty string")
    if key in cache["store"]:
        cache["store"][key] = value
        cache["keys"].remove(key)
        cache["keys"].append(key)
    else:
        if len(cache["keys"]) == cache["limit"]:
            cache["keys"].pop(0)
        cache["store"][key] = value
        cache["keys"].append(key)
    return list(cache["keys"])

def cache_read(cache: Dict[str, int], key: str) -> int:
    if not isinstance(key, str) or not key:
        raise ValueError("Key must be a non-empty string")
    if key not in cache["store"]:
        raise ValueError("Key not found")
    value = cache["store"][key]
    cache["keys"].remove(key)
    cache["keys"].append(key)
    return value
```