Skip to content

Commit a2ea494

Browse files
authored
Merge pull request #391 from splitio/async-redis-split-storage
Added async Redis split storage
2 parents 1feb071 + 4a51f16 commit a2ea494

File tree

4 files changed

+542
-64
lines changed

4 files changed

+542
-64
lines changed

splitio/storage/adapters/cache_trait.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import threading
44
import time
55
from functools import update_wrapper
6-
6+
from splitio.optional.loaders import asyncio
77

88
DEFAULT_MAX_AGE = 5
99
DEFAULT_MAX_SIZE = 100
@@ -84,6 +84,42 @@ def get(self, *args, **kwargs):
8484
self._rollover()
8585
return node.value
8686

87+
async def get_key(self, key):
88+
"""
89+
Fetch an item from the cache, return None if does not exist
90+
91+
:param key: User supplied key
92+
:type key: str/frozenset
93+
94+
:return: Cached/Fetched object
95+
:rtype: object
96+
"""
97+
async with asyncio.Lock():
98+
node = self._data.get(key)
99+
if node is not None:
100+
if self._is_expired(node):
101+
return None
102+
if node is None:
103+
return None
104+
node = self._bubble_up(node)
105+
return node.value
106+
107+
async def add_key(self, key, value):
108+
"""
109+
Add an item from the cache.
110+
111+
:param key: User supplied key
112+
:type key: str/frozenset
113+
114+
:param value: key value
115+
:type value: str
116+
"""
117+
async with asyncio.Lock():
118+
node = LocalMemoryCache._Node(key, value, time.time(), None, None)
119+
node = self._bubble_up(node)
120+
self._data[key] = node
121+
self._rollover()
122+
87123
def remove_expired(self):
88124
"""Remove expired elements."""
89125
with self._lock:
@@ -189,4 +225,4 @@ def _decorator(user_function):
189225
wrapper = lambda *args, **kwargs: _cache.get(*args, **kwargs) # pylint: disable=unnecessary-lambda
190226
return update_wrapper(wrapper, user_function)
191227

192-
return _decorator
228+
return _decorator

0 commit comments

Comments
 (0)