Nameko Cache Tools¶
A few tools to cache interactions between your nameko services, increasing resiliency and performance at the expense of consistency, when it makes sense.
To use nameko-cachetools in a project:
from nameko.rpc import rpc
from nameko_cachetools import CachedRpcProxy
class Service(object):
name = "demo"
other_service = CachedRpcProxy('other_service')
@rpc
def do_something(self, request):
# this rpc response will be cached, further queries will be
# timed and cached values will be returned if not response is
# received or an exception is raised at the destination service
other_service.do_something('hi')
To use a more advanced cache from the cachetools module:
from nameko.rpc import rpc
from nameko_cachetools import CachedRpcProxy
from cachetools import TTLCache
class Service(object):
name = "demo"
# use a TTL cache that will only hold 1024 different rpc interactions
# and expire them afer 30 seconds
other_service = CachedRpcProxy('other_service', cache=TTLCache(1024, 30))
@rpc
def do_something(self, request):
# this rpc response will be cached. For the next 30 seconds,
# further queries will not reach the target service but still
# return the cached response
other_service.do_something('hi')
Caching strategies:¶
CachedRpcProxy¶
If a cached version of this request exists, a response from the cache is sent instead of hanging forever or raising an exception.
If a cached version doesn’t exist, it will behave like a normal rpc, and wait indefinitey for a reply. All successful replies are cached.
WARNING: Do NOT use this for setters, rpcs meant to modify state in the target service
Arguments:
- cache
- the cache to use. This should resemble a dict but can be more sophisticated, like the caches provided by the cachetools package.
- failover_timeout
- if a cached version of this query exists, how long in seconds should your original request wait until it deems the target service as unresponsive and moves on to use a cached response
CacheFirstRpcProxy¶
Stores responses from the original services and keeps them cached.
If further requests come in with the same arguments and found in the cache, a response from the cache is sent instead of hitting the destination service.
WARNING: Do NOT use this for setters, rpcs meant to modify state in the target service
Arguments:
- cache
- the cache to use. This should resemble a dict but can be more sophisticated, like the caches provided by the cachetools package.
Contents:¶
Feedback¶
If you have any suggestions or questions about Nameko Cache Tools feel free to email me at santiycr@gmail.com.
If you encounter any errors or problems with Nameko Cache Tools, please let me know! Open an Issue at the GitHub http://github.com/santiycr/nameko-cachetools main repository.