redis中为什么会报这个错误

redis中为什么会报这个错误

https://img1.sycdn.imooc.com//climg/652691460953b10413010721.jpg

为什么

num = int(pipline.get("kill_num").decode("utf-8"))

这行放在

pipline.multi()

下面执行就会报'

Pipeline' object has no attribute 'decode'错误?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-10-12 17:25:30

同学,你好!老师按同学说的并未报错,同学可以将报错的代码以复制粘贴的形式粘贴到问答区,老师这边运行下,方便解决同学问题。

祝学习愉快~

  • 提问者 松松哥哥 #1
    import redis
    import random
    from db.redis_pool_db import pool
    from concurrent.futures import ThreadPoolExecutor
    
    list_a = set()
    
    conn = redis.Redis(
        connection_pool=pool)
    
    thread = ThreadPoolExecutor(300)
    
    while True:
        if len(list_a) == 1000:
            break
        numbers = random.randint(10000, 100000)
        list_a.add(numbers)
    
    conn.delete("kill_total", "kill_num", "kill_flag", "kill_user")
    conn.set("kill_total", 0)
    conn.set("kill_num", 10)
    conn.set("kill_flag", 1)
    conn.expire("kill_flag", 600)
    del conn
    
    
    def dev():
        connection = redis.Redis(
            connection_pool=pool
        )
        pipline = connection.pipeline()
        try:
            if connection.exists("kill_flag") == 1:
                pipline.watch("kill_total", "kill_user")
                total = int(pipline.get("kill_total").decode("utf-8"))
                num = int(pipline.get("kill_num").decode("utf-8"))
                if total < num:
                    pipline.multi()
                    total = int(pipline.get("kill_total").decode("utf-8"))
                    numbers_b = list_a.pop()
                    pipline.incr("kill_total")
                    pipline.rpush("kill_user", numbers_b)
                    pipline.execute()
    
        except Exception as e:
            print(e)
        finally:
            if "pipline" in dir():
                pipline.reset()
    
            if "connection" in dir():
                del connection
    
    
    for i in range(100):
        thread.submit(dev)
    
    print("秒杀已结束")
    total = int(pipline.get("kill_total").decode("utf-8"))

    这行放在了开启事务下面,然后就会报错运行不了。这个是怎么回事啊

    2023-10-12 18:06:24
  • 好帮手慕小猿 回复 提问者 松松哥哥 #2

    同学,你好!由于使用了 pipline.watch() 监视了 "kill_total" 和 "kill_user" 这两个键,如果在 pipline.execute() 之前有对这两个键进行了修改,那么监视就会失败。虽然同学使用了 pipline.multi() 开始一个事务,但在执行事务之前又重新执行了 pipline.get("kill_total") 获取 total 值。从而引发了错误

    祝学习愉快~

    2023-10-12 20:24:34
  • 提问者 松松哥哥 回复 好帮手慕小猿 #3

    没懂,自增加一不是修改吗?

    2023-10-12 20:39:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师