zoukankan      html  css  js  c++  java
  • redis性能提升


    1.redis请求执行原理
    redis客户端与redis服务器之间使用TCP协议进行连接,一个科幻可以通过一个socket连接发送多个请求命令,
    但每个请求命令发出后client通常会阻塞并等待redis服务器处理,redis服务器处理完毕后会将结果通过响应报文返回给client,因此当执行多条命令的时候都需要等待上一条命令执行完毕后才能执行。

    2.合并请求
    每次向redis服务器执行请求,都是一次TCP round trip,
    因此将请求合并,作为一次请求,可以很好的提升性能。
    示例如下:

    import redis
    cache = redis.Redis('127.0.0.1',
                        6379,
                        db=3,
                        password='test',
                        decode_responses=True
                       )
    cache.delete('test_set')
    for i in range(10):
        cache.sadd('test_set',i)
    print(cache.sinter('test_set'))

    运行结果:

    import redis
    cache = redis.Redis('127.0.0.1',
                        6379,
                        db=3,
                        password='test',
                        decode_responses=True
                       )
    values = [0,1,2,3,4,5,6,7,8,9]
    cache.delete('test_set')
    cache.sadd('test_set',*values)
    print(cache.sinter('test_set'))

    运行结果:

    3.批量处理
    每次向redis服务器发送请求,最后发送批量执行命令,redis服务器执行完毕,返回响应。
    当不能合并请求时,如每次sadd的key值不同,可使用批量处理的方式,提升性能。
    示例如下:

    import redis
    cache = redis.Redis('127.0.0.1',
                        6379,
                        db=3,
                        password='test',
                        decode_responses=True
                       )
    for i in range(10):
        cache.delete('test_set_'+str(i))
    for i in range(10):
        cache.sadd('test_set_'+str(i),i)
    for i in range(10):
        print(cache.sinter('test_set_'+str(i)))

    运行结果:

    import redis
    cache = redis.Redis('120.26.217.149',
                        6379,
                        db=3,
                        password='51yunchedevredis',
                        decode_responses=True
                       )
    pipeline = cache.pipeline()
    for i in range(10):
        pipeline.delete('test_set_'+str(i))
    for i in range(10):
        pipeline.sadd('test_set_'+str(i),i)
    pipeline.execute()
    for i in range(10):
        print(cache.sinter('test_set_'+str(i)))

    运行结果:

  • 相关阅读:
    HDU 5716 带可选字符的多字符串匹配(ShiftAnd)
    挑战程序设计竞赛 2.2 一往直前!贪心法
    再叩首
    2016 Multi-University Training Contest 1 总结
    2016 Multi-University Training Contest 2 总结
    2016 Multi-University Training Contest 3 总结
    2016 Multi-University Training Contest 4 总结
    2016 Multi-University Training Contest 5&6 总结
    2016 Multi-University Training Contest 7 总结
    2016 Multi-University Training Contest 8 总结
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7499044.html
Copyright © 2011-2022 走看看