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

    运行结果:

  • 相关阅读:
    java读写文本文件
    django学习<二>:连接数据库
    【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象
    【MongoDB】C#中的Mongo数据类型转换
    【MongoDB】 基于C#官方驱动2.2版的封装类
    【Python】 属性的 get 与 set 方法
    【基础知识】UML基础
    【C#】 知乎用户网络爬虫
    【C#】MVC项目中搭建WebSocket服务器
    【MongoDB】 Windows 安装
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/7499044.html
Copyright © 2011-2022 走看看