zoukankan      html  css  js  c++  java
  • Source code for redis.connection

    redis.connection — redis-py 2.10.5 documentation http://redis-py.readthedocs.io/en/latest/_modules/redis/connection.html#ConnectionPool

    实例化后 应关闭所有连接,或者 释放该连接,避免 端口号被耗尽 

    from redis import *
    redis_key = ['192.168.3.212', '6379', 'nfwt&2016', 4]
    def return_redis(redis_key):
    REDIS_HOST, REDIS_PORT, PASSWORD, db = redis_key
    rds = Redis(host=REDIS_HOST, port=REDIS_PORT, password=PASSWORD, db=db)
    return rds
    rds = return_redis(redis_key)





    这叫我想起来之前遇到过的数据库连接未释放的问题了,关注生命周期是关键
    2
    est 150 天前 ♥ 1
    redis-py 真是想各种吐槽

    - 连接池不能负载均衡
    - 连接池不能读写分离
    - zadd 不支持 nx 等参数
    - zadd 那个坑死无数新人的参数顺序。
    3
    lolizeppelin 150 天前 via Android
    你们用都不看源码的么 那个链接池简陋得连心跳都没 你们也直接用
    4
    geew 150 天前
    @lolizeppelin #3 源码看了 确实简陋 有别的选择吗 基本都在用这个库的吧
    5
    geew 150 天前
    @est #2 确实 有更好的库可以选择吗
    6
    lolizeppelin 150 天前 via Android
    当然自己重新封装 自己写心跳啊
    7
    swulling 150 天前
    https://github.com/andymccurdy/redis-py/pulls

    吐槽不如提 Pull Request 就好了
    8
    swulling 150 天前
    如果发现已经有 Pull Request,+1 求合并就好了,求合并的人多了,自然受重视

    如果只是默默吐槽,那就不怪别人了
    9
    lolizeppelin 150 天前 via Android
    没用的 对比下 kombu 的代码 就知道了 这玩意就是个基本接口根本没打算做全功能

    就算是 kombu openstack 还再封装过一遍

            return self.execute_command(command, *pieces, **kwargs)
    
    
    
    [docs]class Redis(StrictRedis):
        """
        Provides backwards compatibility with older versions of redis-py that
        changed arguments to some commands to be more Pythonic, sane, or by
        accident.
        """
    
        # Overridden callbacks
        RESPONSE_CALLBACKS = dict_merge(
            StrictRedis.RESPONSE_CALLBACKS,
            {
                'TTL': lambda r: r >= 0 and r or None,
                'PTTL': lambda r: r >= 0 and r or None,
            }
        )
    
    [docs]    def pipeline(self, transaction=True, shard_hint=None):
            """
            Return a new pipeline object that can queue multiple commands for
            later execution. ``transaction`` indicates whether all commands
            should be executed atomically. Apart from making a group of operations
            atomic, pipelines are useful for reducing the back-and-forth overhead
            between the client and server.
            """
            return Pipeline(
                self.connection_pool,
                self.response_callbacks,
                transaction,
                shard_hint)
    
    
    [docs]    def setex(self, name, value, time):
            """
            Set the value of key ``name`` to ``value`` that expires in ``time``
            seconds. ``time`` can be represented by an integer or a Python
            timedelta object.
            """
            if isinstance(time, datetime.timedelta):
                time = time.seconds + time.days * 24 * 3600
            return self.execute_command('SETEX', name, time, value)
    
    
    [docs]    def lrem(self, name, value, num=0):
            """
            Remove the first ``num`` occurrences of elements equal to ``value``
            from the list stored at ``name``.
    
            The ``num`` argument influences the operation in the following ways:
                num > 0: Remove elements equal to value moving from head to tail.
                num < 0: Remove elements equal to value moving from tail to head.
                num = 0: Remove all elements equal to value.
            """
            return self.execute_command('LREM', name, num, value)
    
    
    [docs]    def zadd(self, name, *args, **kwargs):
            """
            NOTE: The order of arguments differs from that of the official ZADD
            command. For backwards compatability, this method accepts arguments
            in the form of name1, score1, name2, score2, while the official Redis
            documents expects score1, name1, score2, name2.
    
            If you're looking to use the standard syntax, consider using the
            StrictRedis class. See the API Reference section of the docs for more
            information.
    
            Set any number of element-name, score pairs to the key ``name``. Pairs
            can be specified in two ways:
    
            As *args, in the form of: name1, score1, name2, score2, ...
            or as **kwargs, in the form of: name1=score1, name2=score2, ...
    
            The following example would add four values to the 'my-key' key:
            redis.zadd('my-key', 'name1', 1.1, 'name2', 2.2, name3=3.3, name4=4.4)
            """
            pieces = []
            if args:
                if len(args) % 2 != 0:
                    raise RedisError("ZADD requires an equal number of "
                                     "values and scores")
                pieces.extend(reversed(args))
            for pair in iteritems(kwargs):
                pieces.append(pair[1])
                pieces.append(pair[0])
            return self.execute_command('ZADD', name, *pieces)
    
    
    
    class PubSub(object):
    

      






  • 相关阅读:
    Hibernate 中出现 XXXX is not mapped 问题
    记录一下表格用poi的导出word
    [转帖] 悟透JavaScript
    JAVA读取Oracle中的blob图片字段并显示
    vs2010代码段,用得飞起~
    FontFamily获取中文名字
    vs2010快捷键
    WPF Binding基础
    Binding对数据的转换和校验
    WPF个UI元素
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9074076.html
Copyright © 2011-2022 走看看