diff --git a/Lib/re.py b/Lib/re.py
index 2f1a76e..269eaef 100644
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -118,6 +118,7 @@
 import sys
 import sre_compile
 import sre_parse
+import functools
 
 # public symbols
 __all__ = [ "match", "search", "sub", "subn", "split", "findall",
@@ -205,9 +206,9 @@
     return _compile(pattern, flags)
 
 def purge():
-    "Clear the regular expression cache"
-    _cache.clear()
-    _cache_repl.clear()
+    "Clear the regular expression caches"
+    _compile_typed.clear()
+    _compile_repl.clear()
 
 def template(pattern, flags=0):
     "Compile a template pattern, returning a pattern object"
@@ -289,12 +290,12 @@
             # Ignore problems if the cache changed from another thread.
             pass
 
-def _compile(*key):
+def _compile(*args):
+    return _compile_typed(type(args[0]), *args)
+
+@functools.lru_cache(maxsize=_MAXCACHE)
+def _compile_typed(type, *key):
     # internal: compile pattern
-    cachekey = (type(key[0]),) + key
-    p = _cache.get(cachekey)
-    if p is not None:
-        return p
     pattern, flags = key
     if isinstance(pattern, _pattern_type):
         if flags:
@@ -303,23 +304,14 @@
         return pattern
     if not sre_compile.isstring(pattern):
         raise TypeError("first argument must be string or compiled pattern")
-    p = sre_compile.compile(pattern, flags)
-    if len(_cache) >= _MAXCACHE:
-        _shrink_cache(_cache, _MAXCACHE)
-    _cache[cachekey] = p
+    return sre_compile.compile(pattern, flags)
     return p
 
+@functools.lru_cache(maxsize=_MAXCACHE)
 def _compile_repl(*key):
     # internal: compile replacement pattern
-    p = _cache_repl.get(key)
-    if p is not None:
-        return p
     repl, pattern = key
-    p = sre_parse.parse_template(repl, pattern)
-    if len(_cache_repl) >= _MAXCACHE:
-        _shrink_cache(_cache_repl, _MAXCACHE)
-    _cache_repl[key] = p
-    return p
+    return sre_parse.parse_template(repl, pattern)
 
 def _expand(pattern, match, template):
     # internal: match.expand implementation hook
