LRU 缓存

LRU 缓存

LRU 缓存 client 对象

chatgpt 的回答:
https://chat.openai.com/share/006234cd-1476-4bd5-843d-26ec27f9ce12
一个例子:

from collections import OrderedDict

class JianGuoYunClient:
    def __init__(self, base_url, account, token):
        self.base_url = base_url
        self.account = account
        self.token = token

class LRUCache:
    def __init__(self, max_size):
        self.max_size = max_size
        self.cache = OrderedDict()

    def get(self, key):
        if key not in self.cache:
            return None
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key, value):
        if key in self.cache:
            self.cache[key] = value
            self.cache.move_to_end(key)
        else:
            if len(self.cache) >= self.max_size:
                self.cache.popitem(last=False)
            self.cache[key] = value

class JianGuoYunAccountManager(LRUCache):
    def __init__(self, max_size, base_url, token):
        super().__init__(max_size)
        self.base_url = base_url
        self.token = token

    def get_client(self, jianguoyun_account):
        client = self.get(jianguoyun_account)
        if client is None:
            client = JianGuoYunClient(self.base_url, jianguoyun_account, self.token)
            self.put(jianguoyun_account, client)
        return client

# Usage
max_cache_size = 2
jianguoyun_base_url = "https://example.com"
jianguoyun_token = "your_token_here"

manager = JianGuoYunAccountManager(max_cache_size, jianguoyun_base_url, jianguoyun_token)

# Get client for a user
jianguoyun_account = "user123"
my_client = manager.get_client(jianguoyun_account)
print(my_client)

# Get client for another user
jianguoyun_account2 = "user456"
my_client2 = manager.get_client(jianguoyun_account2)
print(my_client2)

# Automatically managed LRU cache
print(manager.cache)  # You can see which clients are currently cached

# Accessing same client again
my_client3 = manager.get_client(jianguoyun_account)
print(my_client3)

# Automatically managed LRU cache
print(manager.cache)  # You can see which clients are currently cached

# Get client for another user, user456 will be deleted
jianguoyun_account3 = "user897"
my_client3 = manager.get_client(jianguoyun_account3)
print(my_client3)

# Automatically managed LRU cache, 
print(manager.cache)  # You can see which clients are currently cached
LICENSED UNDER CC BY-NC-SA 4.0
Comment