Python의 캐싱

8501 단어 rediscachingpython
캐싱은 싸움 없이 전투에서 승리하는 것입니다.

캐싱은 빠른 검색을 위해 데이터를 캐시에 저장하는 것을 말합니다. 캐싱을 사용하면 항상 계산하지 않고도 응답을 반환할 수 있으므로 확장이 더 쉬워집니다.

A cache is a piece of hardware or software that stores data allowing future responses to be served faster decreasing time taken to return responses.



캐싱은 중앙 처리 장치(CPU) 메모리 캐시, 하드 드라이브 캐시, Linux 운영 체제 파일 캐시, 데이터베이스 쿼리 캐시, DNS(Domain Name System) 클라이언트 캐시, HTTP(Hypertext Transfer Protocol) 브라우저 캐시, HTTP를 비롯한 다양한 시스템에서 사용됩니다. 프록시 및 리버스 프록시.

애플리케이션 성능을 향상시키는 기능을 활용하기 위해 언제 어디서 캐싱할지 고려하는 것이 중요합니다.

캐시 적중률
캐시 적중률은 동일한 캐시된 응답을 몇 번이나 재사용할 수 있는지 측정합니다.
예를 들어 10번의 요청이 있는 90% 캐시 적중률은 10번 중 9번 캐시에 적중했음을 의미합니다. 응답을 한 번만 계산하고 다른 9개의 요청에 대해 동일한 응답을 제공합니다.

응답이 오래되지 않도록 해야 하지만 높은 캐시 적중률이 바람직합니다.

캐시 적중률에 영향을 미치는 요인


데이터 크기



애플리케이션이 생성할 수 있는 가능한 모든 캐시 키의 수는 캐시 적중률에 영향을 미칩니다. 캐시 키가 고유할수록 캐시 적중률이 낮아지기 때문입니다.

우주



객체의 크기와 캐시의 크기는 캐시에 맞추기 위해 객체를 제거해야 하므로 캐시 적중률을 결정합니다.
캐시에 들어갈 수 있는 응답이 많을수록 캐시 적중률이 높아집니다.

장수



만료되거나 무효화되기 전에 응답이 캐시에 저장될 수 있는 평균 시간이 캐시 적중률을 결정합니다.

개체가 만료되기 전에 캐시에 머무를 수 있는 시간을 나타내는 TTL(Time to Live)이 정의됩니다.
TTL이 길수록 캐시 적중률이 높아집니다.

Ideal Cases for Caching



쓰기에 대한 읽기 비율이 높은 사용 사례 캐시된 개체는 한 번 생성되어 무효화되기 전에 더 오랜 기간 동안 저장될 수 있습니다.

Unideal Cases for Caching



데이터 업데이트가 매우 빈번한 사용 사례는 캐시의 개체가 다시 사용되기 전에 무효화될 수 있으므로 캐시를 쓸모 없게 만들 수 있습니다.

Redis에서 구현



이 게시물에서는 Redis를 사용하여 캐싱을 구현하는 방법을 살펴보겠습니다.

Redis은 기능으로 인해 Python과 함께 캐시로 사용되는 가장 인기 있는 데이터 저장소 중 하나입니다.

Redis를 시작하려면 다음을 사용하여 redis를 설치하십시오.
pip install redis
명령줄에서 redis-cli를 실행하여 redis에 연결합니다.
redis의 데이터는 키가 고유해야 하는 키-값 쌍으로 저장됩니다.

You can think of redis as a glorified dictionary.


유용한 명령



데이터를 저장하려면 SET 명령을 사용하십시오.
구문: set key valueSET 명령에는 데이터 저장 방법을 지정하는 몇 가지options가 있습니다.

키를 사용하여 데이터를 검색하려면 GET 명령을 사용하십시오.
구문: get keykeys *를 사용하여 저장된 데이터의 모든 키를 검색합니다.


Python 클라이언트를 Redis에 연결



Redis를 사용하여 API에서 검색된 데이터를 캐시하는 방법을 살펴보겠습니다.

파일 만들기caching.py
import redis
import sys

def connect_redis():
try:
        client = redis.Redis(
            host="localhost",
            port=6379,
            db=0,
            socket_timeout=5,
        )
        ping = client.ping()
        if ping is True:
            print("Connection Established!")
            return client
    except redis.AuthenticationError:
        print("AuthenticationError")
        sys.exit(1)

client = connect_redis()


connect_redis() redis 서버에 연결을 시도합니다.

jsonplaceholder API에서 데이터를 가져와 redis에 저장합니다.

def get_data_from_api(url):
    data = requests.get(url).json()
    return data

def set_data_to_cache(data):
    id = data['id']
    title = data['title']
    timeout = 30
    return client.setex(id,title,timeout)



캐시에서 데이터 가져오기 및 표시

def get_data_from_cache(id):
    title = client.get(id)
    return title

def display_data(id):
    title = get_data_from_cache(id)
    if title is not None:
        return title
    else:
        data = get_data_from_api(url)
        print(data['title'])
        title = data['title']
        return title

client = redis_connect()
url = "https://jsonplaceholder.typicode.com/posts/1"
display_data("1")



코드here를 찾을 수 있습니다.
행복한 학습!!!

참조



스타트업 엔지니어를 위한 웹 확장성.

좋은 웹페이지 즐겨찾기