资讯专栏INFORMATION COLUMN

Redis非事务型流水线

hlcfan / 2195人阅读

摘要:使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行时的性能。使用非事务型流水线同样可以获得相似的性能提升,并且可以让用户同时执行多个不同的命令。

使用事务的其中一个好处就是底层的客户端会通过使用流水线来提高事务执行时的性能。使用非事务型流水线(non-transactional pipeline)同样可以获得相似的性能提升,并且可以让用户同时执行多个不同的命令。

MULTI和EXEC也会消耗资源,并且可能会导致其他重要的命令被延迟执行。但也可以在不使用MULTI和EXEC的情况下,获得流水线带来的所有好处。

pipe = conn.pipeline()

在执行pipeline()时传入True作为参数,或者不传入任何参数,那么客户端将使用MULTI和EXEC包裹起用户要执行的所有命令。如果传入False为参数,那么客户端同样会像执行事务那样收集用户要执行的所有命令,只是不再使用MULTI和EXEC包裹这些命令。如果用户需要向Redis发送多个命令,并且对于这些命令来说,一个命令的执行结果并不会影响另一个命令的输入,而且这些命令也不需要以事务的方式来执行的话,那么我们可以通过向pipeline()方法传入False来进一步提升Redis的整体性能。

下面是没有使用非事务型流水线代码:

def update_token(conn, token, user, item=None):
    timestamp = time.time()
    conn.hset("login:", token, user)
    conn.zadd("recent:", token, timestamp)
    
    if item:
        conn.zadd("viewed:" + token, item, timestamp)
        conn.zremrangebyrank("viewed:" + token, 0, -26)
        conn.zincrby("viewed:", item, -1)
        

使用非实物型流水线后:

def update_token_pipeline(conn, token, uesr, item=None)
    timestamp = time.time()
    pipe = conn.pipeline(False)
    pipe.hset("login:", token, user)
    pipe.zadd("recent:", token, timestamp)
    
    if itme:
        pipe.zadd("viewed:" + token, item, timestamp)
        pipe.zremrangebyrank("viewed:" + token, 0, -26)
        pipe.zincrby("viewed:", item, -1)
    pipe.execute()

根据测试,高延迟网络使用流水线时的速度要比不使用流水线时的速度快5倍,低延迟网络使用流水线也可以带来接近4倍的速度提升,本地网络的测试结果实际上已经达到Python在单核环境使用redis协议发送和接收短命令序列的性能极限。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44554.html

相关文章

  • Python--Redis实战:第四章:数据安全与性能保障:第8节:关于性能方面的注意事项

    摘要:上一篇文章实战第四章数据安全与性能保障第节非事务型流水线下一篇文章实战第五章使用构建支持程序第节使用来记录日志 上一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第7节:非事务型流水线下一篇文章:Python--Redis实战:第五章:使用Redis构建支持程序:第1节:使用Redis来记录日志 习惯了关系数据库的用户在刚开始使用Redis的时候,通常会因为Re...

    neu 评论0 收藏0
  • Python--Redis实战:第四章:数据安全与性能保障:第6节:Redis事务

    摘要:上一篇文章实战第四章数据安全与性能保障第节处理系统故障下一篇文章实战第四章数据安全与性能保障第节非事务型流水线为了确保数据的正确性,我们必须认识到这一点在多个客户端同时处理相同的数据时,不谨慎的操作很容易会导致数据出错。 上一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第5节:处理系统故障下一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第...

    banana_pi 评论0 收藏0

发表评论

0条评论

hlcfan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<