{ "info": { "author": "Memory_Leak", "author_email": "irealing@163.com", "bugtrack_url": null, "classifiers": [], "description": "# red_cache\n\n#### \u4ecb\u7ecd\n\u57fa\u4e8eRedis\u5b9e\u73b0\u7684Python\u7f13\u5b58\u5de5\u5177\n#### \u793a\u4f8b\n##### \u5b89\u88c5\u65b9\u6cd5\n```shell\n$ pip install red-cache\n```\n\n##### \u7f13\u5b58\u51fd\u6570\u6267\u884c\u7ed3\u679c\n\n```python\n@redis_cache.pickle_cache(key=lambda v, t: \"cache:{}:{}\".format(v, t), ex=180)\ndef hell_world(val: str, times: int):\n return val * times\n```\n##### \u4fdd\u5b58JSON\u7f13\u5b58\u6570\u636e\n\n```python\n\n@redis_cache.json_cache(key=lambda v, t: \"cache:{}:{}\".format(v, t), ex=180)\ndef hell_world(val: str, times: int):\n return {\"val\": val, \"times\": times}\n\n```\n\n##### \u7f13\u5b58\u7684\u5c5e\u6027\n\n```python\nclass Demo:\n def load_xxx(self):\n return\n\n xxx = redis_cache.property(key=lambda: \"Demo::xxx\", ex=10)(lambda self: self.load_xxx())\n\n```\n#### \u5220\u9664\u7f13\u5b58\n\n```python\n\n@redis_cache.remove(lambda o: \"auth::user:{}\".format(o))\ndef modify_user(user_id):\n # DO MODIFY USER\n pass\n\n```\n\u4f7f\u7528\u8fd4\u56de\u503c\n\n```python\n\n@redis_cache.remove(lambda o: \"auth::user:{}\".format(o), by_return=True)\ndef modify_user(user_id):\n # DO MODIFY USER\n return \"*********\"\n```\n\u4f7f\u7528\u751f\u6210\u5668\n\n```python\n@redis_cache.remove(lambda o: \"auth::user:{}\".format(o), by_return=True)\ndef modify_users(users):\n # modify users\n for u in users:\n yield u\n\n```\n\n#### \u57fa\u4e8eRedis\u7684\u5206\u5e03\u5f0f\u9501\n\n```python\n\n@red_cache.red_lock(lambda uid, **kwargs: \"red::lock:{}\".format(uid), ttl=100000, retry_times=10, retry_delay=200)\ndef modify_user(uid: str, **kwargs):\n # DO MODIFY USER\n pass\n\n```\n\n#### \u4e34\u65f6\u4ee4\u724c\u5de5\u5177\n\n```python\nimport uuid\n\nfrom red_cache import RedisCache, CachedToken\n\nred_cache = RedisCache(dict(host='10.0.0.11', db=9))\n\n\n# \u58f0\u660e Token\u4ee4\u724c\u7c7b\uff0c\u96c6\u6210CachedToken\nclass Token(CachedToken, metaclass=red_cache.token_meta):\n\n # \u4f7f\u7528metaclass\u65f6\u53ef\u81ea\u52a8\u6ce8\u5165RedisCache\u5bf9\u8c61\u5230\u5f53\u524d\u7c7b\u5bf9\u8c61\n # \u4f7f\u7528\u7c7b\u5c5e\u6027`red_cache`\u6307\u5b9a\u7ed1\u5b9a\u7684RedisCache\u4ea6\u53ef\n\n def __init__(self, token: str, username: str):\n super().__init__()\n self.token = token\n self.username = username\n\n # \u4f7f\u7528cache_key_prefix\u6307\u5b9a\u7f13\u5b58\u540d\u79f0\u524d\u7f00\n cache_key_prefix = property(lambda self: self.__class__.__name__)\n\n # id \u5373\u5f53\u524d\u4ee4\u724c\u5bf9\u8c61\u552f\u4e00\u503c\n @property\n def id(self):\n return self.token\n\n # \u8fd4\u56de\u5b57\u5178\uff0cCachedToken\u4f7f\u7528\u6807\u51c6\u5e93\u7684json\u5305\u5e8f\u5217\u5316\u8be5\u5b57\u5178\u4f5c\u4e3a\u5bf9\u5e94\u7f13\u5b58\u7684\u503c\n def marshal(self) -> dict:\n return dict(token=self.token, username=self.username)\n\n @classmethod\n def new(cls, username: str):\n return cls(token=uuid.uuid1().hex, username=username)\n\n\nif __name__ == '__main__':\n tk = Token.new('/**/').save()\n # \u4f7f\u7528ID\u8bfb\u53d6\u4ee4\u724c\n tk = Token.read(tk.token)\n # \u5237\u65b0\uff0c\u5373\u5f3a\u5236\u5199\u5165\u4ee4\u724c\u5230Redis\n tk.flush()\n # \u5220\u9664\u4ee4\u724c\n tk.remove()\n\n```\n\n#### \u8ba1\u6570\u5668\u5de5\u5177\n\n```python\nfrom red_cache import RedisCache\n\nred_cache = RedisCache(dict(host='10.0.0.11'))\n\n\nclass A:\n # \u81ea\u589e\u8ba1\u6570\u5668\n counter = red_cache.counter(\"resource::a\", 3,init=lambda:20*20)\n # \u81ea\u51cf\u8ba1\u6570\u5668\n desc = red_cache.counter(\"resource:desc\", -2)\n # \u57fa\u4e8eHASH\u7684\u81ea\u589e\u8ba1\u6570\u5668\n score = red_cache.hash_counter(\"score\", \"a\", 1,init=lambda:20+1)\n\n def __init__(self):\n self._sign = red_cache.counter(\"{}::sign:{}\".format(self.__class__.__name__, id(self)))\n\n # \u4f7f\u7528\u5c5e\u6027\n sign = property(lambda self: self._sign.get())\n\n\n```\n\n@author:[Memory_Leak](https://github.com/irealing/red_cache)\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitee.com/irealing/red_cache", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "red-cache", "package_url": "https://pypi.org/project/red-cache/", "platform": "", "project_url": "https://pypi.org/project/red-cache/", "project_urls": { "Homepage": "https://gitee.com/irealing/red_cache" }, "release_url": "https://pypi.org/project/red-cache/0.0.7/", "requires_dist": [ "redis (>=3.0.1)" ], "requires_python": "", "summary": "", "version": "0.0.7" }, "last_serial": 5648175, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "5020c7340e0103fe455a5fbd40e1ed64", "sha256": "c38acdfc9a2c08b65f6a6925cfc63e4393a1d30455ba3089c8f189926387d4b8" }, "downloads": -1, "filename": "red_cache-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "5020c7340e0103fe455a5fbd40e1ed64", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3419, "upload_time": "2019-01-08T09:23:30", "url": "https://files.pythonhosted.org/packages/db/5b/20e34b7ca68e6f94e8f409ce8f2a204b3e692583da183a5d70545285790d/red_cache-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "35eab958389cbed8e8e403e451669837", "sha256": "232281d3980ec07bc792d0000612adc530904b829db9f7965ac367fe4d1f2131" }, "downloads": -1, "filename": "red_cache-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "35eab958389cbed8e8e403e451669837", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7823, "upload_time": "2019-01-08T09:35:49", "url": "https://files.pythonhosted.org/packages/44/24/587c4b441854e8c5d93a321ecaa45536e2250334e28583c512b0c8226143/red_cache-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "b47f27406963969c3e72bcbec61197a5", "sha256": "b94460b43c20f58e22774e9538d9377d80071bdc771c577db05dd5189eb844d1" }, "downloads": -1, "filename": "red_cache-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b47f27406963969c3e72bcbec61197a5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7918, "upload_time": "2019-01-09T01:19:57", "url": "https://files.pythonhosted.org/packages/b6/ae/107b42b118dacdd47c847665f49ff5d239e4f739930a6e5cef6749c1bde1/red_cache-0.0.3-py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "f28e325ec37585ce3142b3acbb9b9b4d", "sha256": "a2e9676b807a4dd562671f1d6e456b541115580edf3dd9728e1f6721f2d864c7" }, "downloads": -1, "filename": "red_cache-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f28e325ec37585ce3142b3acbb9b9b4d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8078, "upload_time": "2019-01-10T10:28:03", "url": "https://files.pythonhosted.org/packages/73/a8/c2dbbfb467d4b7b74eb13a54b04f4b492f0d3eae22d2d8161ebf9ac0d808/red_cache-0.0.4-py3-none-any.whl" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "c424c94f63838e69d76afdff34be257f", "sha256": "5e89b84dd8ce2dee2587d80e4b9cce0debde542015b79fd8fd664fff2c8b99cb" }, "downloads": -1, "filename": "red_cache-0.0.5.tar.gz", "has_sig": false, "md5_digest": "c424c94f63838e69d76afdff34be257f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4944, "upload_time": "2019-07-13T06:40:47", "url": "https://files.pythonhosted.org/packages/1a/2c/210f166e192a2e872864b9f7eb3a09235e99b91e5124dbe9080647552e81/red_cache-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "c6b4c0794ce713f49904814ff4842946", "sha256": "5b43c5b02b5aedee1857333fa482bc2ae2801ab71ca1ca1ef53969d5fed9ba45" }, "downloads": -1, "filename": "red_cache-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "c6b4c0794ce713f49904814ff4842946", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10614, "upload_time": "2019-08-07T15:26:16", "url": "https://files.pythonhosted.org/packages/95/8e/597bc49f7873e537b20e9546771eb3c600d46dad193a921fd4f5ec5d5ff9/red_cache-0.0.6-py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "62a87499c0079f6e578c54005fc5aea1", "sha256": "93669ace8beaf6711bdba9da265716487cc4ff42b914f6ecfdfcde71de54c07c" }, "downloads": -1, "filename": "red_cache-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "62a87499c0079f6e578c54005fc5aea1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10716, "upload_time": "2019-08-08T04:50:40", "url": "https://files.pythonhosted.org/packages/db/e6/c7e02e26434968748ea70edf9f8f90369ec0d483091a58491fed31bf1f5d/red_cache-0.0.7-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "62a87499c0079f6e578c54005fc5aea1", "sha256": "93669ace8beaf6711bdba9da265716487cc4ff42b914f6ecfdfcde71de54c07c" }, "downloads": -1, "filename": "red_cache-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "62a87499c0079f6e578c54005fc5aea1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10716, "upload_time": "2019-08-08T04:50:40", "url": "https://files.pythonhosted.org/packages/db/e6/c7e02e26434968748ea70edf9f8f90369ec0d483091a58491fed31bf1f5d/red_cache-0.0.7-py3-none-any.whl" } ] }