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

      






  • 相关阅读:
    vue之父子组件间通信实例讲解(props、$ref、$emit)
    jsp的内置对象
    一道关于类加载顺序的面试题
    web.xml中的load-on-startup
    静态代理、JDK动态代理和CGLib动态代理之前的区别
    有关于tomcat启动时,利用listener来执行某个方法
    有关于注解
    java 代码块,静态代码块,构造器等的执行顺序
    java容器的理解(collection)
    PHP常用的缓存技术汇总
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9074076.html
Copyright © 2020-2023  润新知