• python之redis的使用及封装


    首先安装 redis 模块

    Python 要使用 redis,需要先安装 redis 模块:

    sudo pip3 install redis
    或
    sudo easy_install redis
    或
    sudo python setup.py install

    redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。

    redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。

    实例:

    import redis   # 导入redis 模块
    
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)  
    r.set('name', 'runoob')  # 设置 name 对应的值
    print(r['name'])
    print(r.get('name'))  # 取出键 name 对应的值
    print(type(r.get('name')))  # 查看类型

    输出结果为:

    runoob
    runoob
    <class 'str'>

    连接池

    redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。

    默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。

    实例

    import redis    # 导入redis 模块
    
    pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)
    r = redis.Redis(host='localhost', port=6379, decode_responses=True)  
    r.set('name', 'runoob')  # 设置 name 对应的值
    print(r.get('name'))  # 取出键 name 对应的值

     

    redis 基本命令详见:https://www.runoob.com/w3cnote/python-redis-intro.html

    下面为封装好的redis脚本

    import redis
    
    # 不适用于模糊搜索
    class MyRedis():
        def __init__(self, host = "XXX", port = 6379, password = 'XXX'):
            pools = redis.ConnectionPool(host= host, port= port, password= password, decode_responses=True)
            self.__redis = redis.StrictRedis(connection_pool=pools)
    
        # 在 Redis 中设置值,默认,不存在则创建,存在则修改。
        def set(self, key, value):
            return self.__redis.set(key, value)
    
        # 取出键对应的值
        def get(self, key):
            if self.__redis.exists(key):
                return self.__redis.get(key)
            else:
                return None
    
        # 获取有序集合中所有元素
        def zrange(self, key):
            if self.__redis.exists(key):
                return self.__redis.zrange(key,0,-1,desc=False, withscores=True)
            else:
                return None
    
        # 获取值的索引号
        def zrank(self, key):
            if self.__redis.exists(key):
                return self.__redis.zrank(key)
            else:
                return None
    
        # 按照分数范围获取name对应的有序集合的元素
        def zrangebyscore(self, key):
            if self.__redis.exists(key):
                return self.__redis.zrangebyscore(key, 0, -1, withscores=True)
            else:
                return None
    
        # 按照分数范围获取有序集合的元素并排序(默认从大到小排序)
        def zrevrange(self, key):
            if self.__redis.exists(key):
                return self.__redis.zrevrange(key, 0, -1)
            else:
                return None
    
        # 删除键值对
        def delete(self,key):
            if self.__redis.exists(key):
                 return self.__redis.delete(key)
            else:
                return None
    
        # 获取key对应hash的所有键值
        def hgetall(self, key):
            if self.__redis.exists(key):
                return self.__redis.hgetall(key)
            else:
                return None
    
        # 统计返回的总个数
        def rcount(self, re, key):
            if self.__redis.exists(key):
                sum = 0
                for i in re:
                    print(i)
                    sum += 1
                print("总共有%s个" % (sum))
    
    
    if __name__ =="__main__":
        MyR = MyRedis()
        key = "XXX"
        re = MyR.zrange(key)
        MyR.rcount(re, key)
    View Code

    1、常见报错:

    UserWarning: redis-py works best with hiredis. Please consider installing warnings.warn(msg)

    解决方法:安装 hiredis库

  • 相关阅读:
    nginx相关总结
    nginx 虚拟主机+反向代理+负载均衡
    linux文本查看与搜索
    mysqldump导出数据出现问题
    转载 | 缩小浏览器窗口右边出现空白
    转载 | Sublime Text3 安装以及初次配置
    转载 | Sublime text3 实用快捷键整理
    转载 | SVG向下兼容优雅降级方法
    CSS等分布局方法
    如何用实现文字环绕图片?
  • 原文地址:https://www.cnblogs.com/CincentHuang/p/15698259.html
Copyright © 2020-2023  润新知