Solve a coding problem involving data structures, with a follow-up task to optimize for performance or specific edge cases.
Implement an LRU cache interface using operations and capacity. Each operation is ['put', key, value] or ['get', key]; return the values produced by get operations, using -1 for missing keys. When capacity is exceeded, evict the least recently used key. The optimized solution should make both get and put O(1) and handle updates, repeated access, and capacity one.
def lru_cache_operations(operations, capacity):