zoukankan      html  css  js  c++  java
  • Redis 练习(二)

    需求:

    1. 为购物网站实现登录状态及浏览记录的维护
    2. 进入时检查 token 是否已登录
    3. 每次进入更新 token 最新进入时间
    4. 记录用户浏览的商品信息(最多 25 个)
    5. 定时检查 token 数量,如果超过上限(1000 个),则删除多余 token 及对应信息

    Redis 中结构设计:

    登录用户信息
    value 结构 HASH
    key login:
    value token 和 user 的对应哈希表
    token 最新浏览时间信息
    value 结构 ZSET
    key recent:
    value

    成员为 token

    分支为 最新浏览时间

    token 浏览商品信息
    value 结构 ZSET
    key viewed:<token>
    value

    成员为 商品信息

    分值为 浏览时间

    Python 实现

    import time
    
    QUIT = False
    LIMIT = 1000
    
    
    def check_token(conn, token):
        return conn.hget('login:', token)
    
    
    def update_token(conn, token, user, item=None):
        # 获取当前时间戳
        timestamp = time.time()
        # 添加登录用户
        conn.hset('login:', token, user)
        # 记录最后一次令牌出现时间, ZSET 中是使用当前时间戳作为 分值
        conn.zadd('recent:', token, timestamp)
        # item 为浏览的商品
        if item:
            # 记录浏览过的商品
            conn.zadd('viewed:' + token, item, timestamp)
            # 只保留最新的 25 个浏览商品记录
            conn.zremreangebyrank('viewed:' + token, 0, -26)
    
    
    def clean_sessions(conn):
        while not QUIT:
            # 获取已有令牌数量
            size = conn.zcard('recent:')
            if size <= LIMIT:
                time.sleep(1)
                continue
    
            # 获取需要移除的令牌信息
            end_index = size - LIMIT
            tokens = conn.zrange('recent:', 0, end_index - 1)
    
            # 获取令牌对应的浏览记录keys
            session_keys = []
            for token in tokens:
                session_keys.append('viewed:' + token)
            # 删除令牌对应的浏览记录
            conn.delete(*session_keys)
            # 删除登录的用户信息
            conn.hdel('login:', *tokens)
            # 删除令牌最后一次出现时间的记录
            conn.zrem('recent:', *tokens)
  • 相关阅读:
    如何输出高精度时间差
    GetThreadTimes获取其它线程cpu时间
    12-Python基础之类与面向对象
    10-Python函数之递归
    09-Python基础之内置函数与匿名函数
    08-Python基础之迭代器与生成器
    07-Python基础之装饰器
    06-Python基础之函数进阶(嵌套,作用域)
    05-Python基础之函数基础
    04-Python基础之文件操作基础
  • 原文地址:https://www.cnblogs.com/zawier/p/8526691.html
Copyright © 2011-2022 走看看