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)))

    运行结果:

  • 相关阅读:
    day4-生成器
    第三天-函数
    编码问题
    可变不可变类型总结
    由var与let引起的百度地图所有的覆盖点的信息都是最后一个的
    《企业应用架构模式》 三
    IndexDB
    ESA与SOA
    SOA
    Dubbo(一)
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7499044.html
Copyright © 2011-2022 走看看