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

    运行结果:

  • 相关阅读:
    关于DataGrid最后一页只有一行记录时,删除此记录出错的问题
    数据库开发个人总结(ADO.NET小结)
    MSSQL server数据库开发精典技巧
    愈强愈勇(奥运六星)
    中国与日本的生活对比 转)
    古龙妙语录
    DataGrid单击行时改变颜色
    VS.NET 2003 控件命名规范
    qt国际化
    Histogram matching using python, opencv
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7499044.html
Copyright © 2011-2022 走看看