如何解决Redis过期key没有删除的问题

流程图

flowchart TD
    A(设置key) --> B(获取key)
    B --> C(判断key是否过期)
    C -- 是 --> D(删除key)
    C -- 否 --> E(继续使用key)

代码实现步骤

  1. 通过Redis客户端设置key和value。
import redis

# 创建连接
r = redis.Redis(host='localhost', port=6379, db=0)

# 设置key,value和过期时间
r.set('key_name', 'value', ex=60)  # key_name为key的名称,value为key的值,ex=60表示60秒后key过期
  1. 获取key的值。
# 获取key的值
value = r.get('key_name')
  1. 判断key是否过期。
# 判断key是否过期
if r.ttl('key_name') == -2:
    # key过期
    print("key已过期")
else:
    # key未过期
    print("key未过期")
  1. 如果key已过期,则删除key。
# 删除key
r.delete('key_name')
  1. 如果key未过期,则继续使用key。
# 继续使用key
# ...

类图

classDiagram
    class Redis {
        - host: str
        - port: int
        - db: int
        + set(key: str, value: str, ex: int)
        + get(key: str) : str
        + ttl(key: str) : int
        + delete(key: str)
    }

完整代码示例

import redis

class Redis:
    def __init__(self, host: str, port: int, db: int):
        self.host = host
        self.port = port
        self.db = db

    def set(self, key: str, value: str, ex: int):
        r = redis.Redis(host=self.host, port=self.port, db=self.db)
        r.set(key, value, ex=ex)

    def get(self, key: str) -> str:
        r = redis.Redis(host=self.host, port=self.port, db=self.db)
        return r.get(key)

    def ttl(self, key: str) -> int:
        r = redis.Redis(host=self.host, port=self.port, db=self.db)
        return r.ttl(key)

    def delete(self, key: str):
        r = redis.Redis(host=self.host, port=self.port, db=self.db)
        r.delete(key)

# 创建连接
r = Redis(host='localhost', port=6379, db=0)

# 设置key,value和过期时间
r.set('key_name', 'value', ex=60)

# 获取key的值
value = r.get('key_name')

# 判断key是否过期
if r.ttl('key_name') == -2:
    # key过期
    print("key已过期")
else:
    # key未过期
    print("key未过期")

# 删除key
r.delete('key_name')

在这个示例中,通过使用Redis客户端连接到Redis服务器,并利用Redis提供的相关方法来设置、获取、判断和删除key,可以解决"Redis过期了key没有删除"的问题。根据需要对过期的key进行相应的处理,可以避免过期key占用过多的内存资源。