Commit aa2ffa69 authored by Tomi Suomela's avatar Tomi Suomela

Decode byte keys returned by scan_iter, touch_pattern fixed

parent 230b29fe
......@@ -372,7 +372,7 @@ class BaseRedisCache(BaseCache):
key_timeout = (
None if stale_cache_timeout is None else timeout + stale_cache_timeout
)
client.expire("__fresh__" + key, timeout)
client.expire(fresh_key, timeout)
return client.expire(key, key_timeout)
......@@ -403,9 +403,9 @@ class BaseRedisCache(BaseCache):
def _delete_pattern(self, client, pattern):
keys = list(client.scan_iter(match=pattern))
if keys:
all_keys = keys.copy()
all_keys = [key.decode() for key in keys]
for key in keys:
all_keys.append("__fresh__" + key)
all_keys.append("__fresh__" + key.decode())
client.delete(*all_keys)
def delete_pattern(self, pattern, version=None):
......@@ -526,8 +526,20 @@ class BaseRedisCache(BaseCache):
return acquired
@get_client()
def touch_pattern(self, client, pattern, timeout=DEFAULT_TIMEOUT, stale_cache_timeout=None):
def _touch_pattern(self, client, pattern, timeout=DEFAULT_TIMEOUT, stale_cache_timeout=None):
"""Reset the timeout of a keys to `timeout` seconds."""
keys = list(client.scan_iter(match=pattern))
for key in keys:
self.touch(key, timeout, stale_cache_timeout)
decoded_key = key.decode()
key_timeout = timeout
fresh_key = "__fresh__" + decoded_key
if client.exists(fresh_key):
key_timeout = (
None if stale_cache_timeout is None else timeout + stale_cache_timeout
)
client.expire(fresh_key, timeout)
client.expire(decoded_key, key_timeout)
def touch_pattern(self, client, pattern, timeout=DEFAULT_TIMEOUT, stale_cache_timeout=None):
raise NotImplementedError
......@@ -116,3 +116,8 @@ class ShardedRedisCache(BaseRedisCache):
"""
for client in self.clients.values():
self._reinsert_keys(client)
def touch_pattern(self, pattern, timeout=DEFAULT_TIMEOUT, stale_cache_timeout=None):
pattern = self.make_key(pattern, version=None)
for client in self.clients.values():
self._touch_pattern(client, pattern, timeout, stale_cache_timeout)
......@@ -97,3 +97,7 @@ class RedisCache(BaseRedisCache):
Reinsert cache entries using the current pickle protocol version.
"""
self._reinsert_keys(self.master_client)
def touch_pattern(self, pattern, timeout=DEFAULT_TIMEOUT, stale_cache_timeout=None):
pattern = self.make_key(pattern, version=None)
self._touch_pattern(self.master_client, pattern, timeout, stale_cache_timeout)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment