Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
This package offers several data types to ease working with a Redis cache in an asynchronous workflow. The package is currently in development and it's not recommended to start using it in production at this point.
To use async-rediscache
, make sure that redis
is installed and running on your system. Alternatively, you could use fakeredis
as a back-end for testing purposes and local development.
pip
To install async-rediscache
run the following command:
pip install async-rediscache
Alternatively, to install async-rediscache
with fakeredis
run:
pip install async-rediscache[fakeredis]
RedisSession
To use a RedisCache
, you first have to create a RedisSession
instance that manages the connection pool to Redis. You can create the RedisSession
at any point but make sure to call the connect
method from an asynchronous context (see this explanation for why).
import async_rediscache
async def main():
session = async_rediscache.RedisSession()
await session.connect()
# Do something interesting
await session.close()
RedisSession
with a network connectionasync def main():
connection = {"address": "redis://127.0.0.1:6379"}
async_rediscache.RedisSession(**connection)
RedisCache
A RedisCache
is the most basic data type provided by async-rediscache
. It works like a dictionary in that you can associate keys with values. To prevent key collisions, each RedisCache
instance should use a unique namespace
identifier that will be prepended to the key when storing the pair to Redis.
RedisCache
instanceWhen creating a RedisCache
instance, it's important to make sure that it has a unique namespace
. This can be done directly by passing a namespace
keyword argument to the constructor:
import async_rediscache
birthday_cache = async_rediscache.RedisCache(namespace="birthday")
Alternatively, if you assign a class attribute to a RedisCache
instance, a namespace will be automatically generated using the name of the owner class and the name of attribute assigned to the cache:
import async_rediscache
class Channel:
topics = async_rediscache.RedisCache() # The namespace be set to `"Channel.topics"`
Note: There is nothing preventing you from reusing the same namespace, although you should be aware this could lead to key collisions (i.e., one cache could interfere with the values another cache has stored).
RedisCache
instanceUsing a RedisCache
is straightforward: Just call and await the methods you want to use and it should just work. There's no need to pass a RedisSession
around as the session is fetched internally by the RedisCache
. Obviously, one restriction is that you have to make sure that the RedisSession
is still open and connected when trying to use a RedisCache
.
Here are some usage examples:
import async_rediscache
async def main():
session = async_rediscache.RedisSession()
await session.connect()
cache = async_rediscache.RedisCache(namespace="python")
# Simple key/value manipulation
await cache.set("Guido", "van Rossum")
print(await cache.get("Guido")) # Would print `van Rossum`
# A contains check works as well
print(await cache.contains("Guido")) # True
print(await cache.contains("Kyle")) # False
# You can iterate over all key, value pairs as well:
item_view = await cache.items()
for key, value in item_view:
print(key, value)
# Other options:
number_of_pairs = await cache.length()
pairs_in_dict = await cache.to_dict()
popped_item = await cache.pop("Raymond", "Default value")
await cache.update({"Brett": 10, "Barry": False})
await cache.delete("Barry")
await cache.increment("Brett", 1) # Increment Brett's int by 1
await cache.clear()
await session.close()
RedisQueue
A RedisQueue
implements the same interface as a queue.SimpleQueue
object, except that all the methods are coroutines. Creating an instance works the same as with a RedisCache
.
FAQs
An easy to use asynchronous Redis cache
We found that async-rediscache demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.