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): ...@@ -372,7 +372,7 @@ class BaseRedisCache(BaseCache):
key_timeout = ( key_timeout = (
None if stale_cache_timeout is None else timeout + stale_cache_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) return client.expire(key, key_timeout)
...@@ -403,9 +403,9 @@ class BaseRedisCache(BaseCache): ...@@ -403,9 +403,9 @@ class BaseRedisCache(BaseCache):
def _delete_pattern(self, client, pattern): def _delete_pattern(self, client, pattern):
keys = list(client.scan_iter(match=pattern)) keys = list(client.scan_iter(match=pattern))
if keys: if keys:
all_keys = keys.copy() all_keys = [key.decode() for key in keys]
for key in keys: for key in keys:
all_keys.append("__fresh__" + key) all_keys.append("__fresh__" + key.decode())
client.delete(*all_keys) client.delete(*all_keys)
def delete_pattern(self, pattern, version=None): def delete_pattern(self, pattern, version=None):
...@@ -526,8 +526,20 @@ class BaseRedisCache(BaseCache): ...@@ -526,8 +526,20 @@ class BaseRedisCache(BaseCache):
return acquired 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)) keys = list(client.scan_iter(match=pattern))
for key in keys: 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): ...@@ -116,3 +116,8 @@ class ShardedRedisCache(BaseRedisCache):
""" """
for client in self.clients.values(): for client in self.clients.values():
self._reinsert_keys(client) 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): ...@@ -97,3 +97,7 @@ class RedisCache(BaseRedisCache):
Reinsert cache entries using the current pickle protocol version. Reinsert cache entries using the current pickle protocol version.
""" """
self._reinsert_keys(self.master_client) 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