파이썬 객체에서 캐시 키를 만드는 방법
hashlib.md5
그것은 나와 내가 가진 사용 사례에 적합합니다.디스크캐시
어제 우리는 python diskcache를 사용하여 영구 캐시를 설정하는 방법에 대해 이야기했습니다. 이것이 실제로 작동하게 하려면 일종의 파이썬 개체에서 일관된 캐시 키를 만드는 좋은 방법이 필요합니다.
How I setup a sqlite cache in python
해시시
작동하지 않습니다
내 첫 번째 생각은 파일을 해시하는 것이었습니다. 이렇게 하면 각각에 대해 고유한 키가 제공됩니다. 이것은 작동하고 하나의 주어진 파이썬 프로세스에 대해 일관된 키를 제공합니다. 새 통역사를 시작하면 다른 키를 얻게 됩니다.
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com)
❯ ipython
waylonwalker ↪main v3.8.0 ipython
❯ hash("waylonwalker")
-3862245013515310359
waylonwalker ↪main v3.8.0 ipython
❯ hash("waylonwalker")
-3862245013515310359
waylonwalker ↪main v3.8.0 ipython
❯ exit
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com)
❯ ipython
waylonwalker ↪main v3.8.0 ipython
❯ hash("waylonwalker")
-83673051278873734
here is a snapshot of my terminal proving that you can get the same hash in one session, but it changes when you restart ipython.
hashlib.md5
다음은 md5 캐시가 여러 세션에서 일관됨을 보여주는 몇 가지 ipython 세션입니다.
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com) on (us-east-1)
❯ ipython
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker")
[PYFLYBY] import hashlib
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ <ipython-input-1-1537c4473c74>:1 in <module> │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: Unicode-objects must be encoded before hashing
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker".encode("utf-8"))
<md5 HASH object @ 0x7fe4ba6832d0>
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker".encode("utf-8")).hexdigest()
'1c7c1073ca096ffdb324471770911fe2'
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker".encode("utf-8")).hexdigest()
'1c7c1073ca096ffdb324471770911fe2'
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker".encode("utf-8")).hexdigest()
'1c7c1073ca096ffdb324471770911fe2'
waylonwalker ↪main v3.8.0 ipython
❯ exit
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com) on (us-east-1) took 47s
❯ ipython
waylonwalker ↪main v3.8.0 ipython
❯ hashlib.md5("waylonwalker".encode("utf-8")).hexdigest()
[PYFLYBY] import hashlib
'1c7c1073ca096ffdb324471770911fe2'
디스크 캐시용 키
일관성이 있기 때문에 디스크 캐시 작업을 위한 캐시 키로 사용할 수 있습니다. 여러 가지 다른 것들을 캐시에 전달할 수 있는 작은 기능을 설정했습니다. str 메소드가 존재하고 키를 캐시하려는 데이터를 제공하는 한 작동합니다.
def make_hash(self, *keys: str) -> str:
str_keys = [str(key) for key in keys]
return hashlib.md5("".join(str_keys).encode("utf-8")).hexdigest()
understanding python *args and **kwargs
If the args is confusing, I have a full article on
*args
and `*kwargs`.
직접 확인하세요
여기에서 작동하는 것을 볼 수 있습니다. 함수에 전달된 모든 것이 키의 일부가 됩니다.
waylonwalker ↪main v3.8.0 ipython
❯ def make_hash(self, *keys: str) -> str:
...: str_keys = [str(key) for key in keys]
...: return hashlib.md5("".join(str_keys).encode("utf-8")).hexdigest()
...:
waylonwalker ↪main v3.8.0 ipython
❯ make_hash(1, "one", "1", 1.0)
'73901d019df012a1cdab826ce301217d'
waylonwalker ↪main v3.8.0 ipython
❯ exit
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com) on (us-east-1) took 19m19s
❯
waylonwalker.com on main [$✘!?] via v5.1.5 v3.8.0 (waylonwalker.com) on (us-east-1)
❯ ipython
waylonwalker ↪main v3.8.0 ipython
❯ def make_hash(self, *keys: str) -> str:
...: str_keys = [str(key) for key in keys]
...: return hashlib.md5("".join(str_keys).encode("utf-8")).hexdigest()
[PYFLYBY] import hashlib
waylonwalker ↪main v3.8.0 ipython
❯ make_hash(1, "one", "1", 1.0)
'73901d019df012a1cdab826ce301217d'
Reference
이 문제에 관하여(파이썬 객체에서 캐시 키를 만드는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/waylonwalker/how-i-make-cache-keys-from-python-objects-a6e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)