diff --git a/pyopencl/invoker.py b/pyopencl/invoker.py
index 8d3c4453065eebd5ef7ed2a40ce8d829422cac33..6d21d58ee1668e41a7c8642e3c3d4fcf27271858 100644
--- a/pyopencl/invoker.py
+++ b/pyopencl/invoker.py
@@ -373,7 +373,8 @@ def _check_arg_size(function_name, num_cl_args, arg_types, devs):
 # }}}
 
 
-invoker_cache = WriteOncePersistentDict(
+if not cl._PYOPENCL_NO_CACHE:
+    invoker_cache = WriteOncePersistentDict(
         "pyopencl-invoker-cache-v41",
         key_builder=_NumpyTypesKeyBuilder(),
         in_mem_cache_size=0)
@@ -400,7 +401,8 @@ def generate_enqueue_and_set_args(function_name,
 
     if not from_cache:
         pmod, enqueue_name = _generate_enqueue_and_set_args_module(*cache_key)
-        invoker_cache.store_if_not_present(cache_key, (pmod, enqueue_name))
+        if not cl._PYOPENCL_NO_CACHE:
+            invoker_cache.store_if_not_present(cache_key, (pmod, enqueue_name))
 
     return (
             pmod.mod_globals[enqueue_name],
diff --git a/pyopencl/scan.py b/pyopencl/scan.py
index 4c1fc8d19aa68aa35fc401eb54d1c407ccfcab8b..320b6e1375c938fc9ec4e35f8fc05cdb797a0afb 100644
--- a/pyopencl/scan.py
+++ b/pyopencl/scan.py
@@ -1141,7 +1141,8 @@ class GenericScanKernelBase(ABC):
         pass
 
 
-generic_scan_kernel_cache = WriteOncePersistentDict(
+if not cl._PYOPENCL_NO_CACHE:
+    generic_scan_kernel_cache = WriteOncePersistentDict(
         "pyopencl-generated-scan-kernel-cache-v1",
         key_builder=_NumpyTypesKeyBuilder(),
         in_mem_cache_size=0)
@@ -1199,7 +1200,8 @@ class GenericScanKernel(GenericScanKernelBase):
                       self.second_level_scan_gen_info,
                       self.final_update_gen_info)
 
-            generic_scan_kernel_cache.store_if_not_present(cache_key, result)
+            if not cl._PYOPENCL_NO_CACHE:
+                generic_scan_kernel_cache.store_if_not_present(cache_key, result)
 
         # Build the kernels.
         self.first_level_scan_info = self.first_level_scan_gen_info.build(