一、基本使用

  1、安装模块:pip install redis。

  2、基本使用:

from redis import Redis  # 导入模块

conn = Redis(host='127.0.0.1', port=6379)  # 建立连接并获取连接对象
conn.set('name', 'jan')  # 存入/修改
res = conn.get('name')  # 获取

二、连接池

  1、简述:可以存放多个redis连接,需要使用时,可以从连接池中拿出一个,用完会自动再返回连接池。

  2、单列连接池:若每次要使用连接都新造连接池的话,会有多个连接池闲置,浪费资源,所以可以创建一个容量足够的单例连接池。

  3、以模块导入的方式为例,创建单例连接池:

import redis

# 创建一个容量为100的连接池
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379, max_connections=100)
import redis

from redis_pool import POOL  # 导入连接池

# 从连接池中取出一个连接对象
conn = redis.Redis(connection_pool=POOL)
conn.set('name', 'tom')
res = conn.get('name')

三、string常用操作

  1、conn.set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False):新建/修改。

    ①ex:过期时间,单位<秒>。

    ②px:过期时间,单位<毫秒>。

    ③nx:若设置为<True>,set操作只能新建,不能修改。

    ④xx:若设置为<True>,set操作只能修改,不能新建。

  2、conn.mset(mapping):批量新建/批量修改。

    ①eg:conn.mset({'age1': 18, 'age2': 28})

  3、conn.mget(keys, *args):批量获取。

    ①eg:conn.mget(['age1', 'age2'])

    ②eg:conn.mget('age1', 'age2')

  4、conn.getset(name, value):获取原值并修改为新值。

    ①若name不存在,则新建,并返回None。

    ②eg:conn.getset('age1', 30)

  5、conn.getrange(key, start, end):截取字符串的一部分,返回字符串,前闭后闭。

    ①eg:conn.getrange('name', 1, 3)

  6、conn.incr(name, amount=1):累加。

    ①name:必须为纯数字。

    ②name:不存在则新建。

    ③amount:步长,默认为1,负数累减。

    ④eg:conn.incr('conut')

  7、conn.decr(name, amount=1):累减,累加的反向操作。

  8、conn.incrbyfloat(name, amount=1.0):小数累加,步长可为小数。

  9、conn.append(key, value):拼接。

    ①相当于字符串相加。

    ②eg:conn.append('name', 'dsb')

四、hash常用操作

  1、conn.hset(name, key=None, value=None, mapping=None):单键新增/修改。

    ①eg:conn.hset('stu1', 'age', 18)

    ②eg:conn.hset('stu1', {'name': 18})

  2、conn.hget(name, key):获取指定键的值。

    ①eg:conn.hget('stu1', 'age')

  3、conn.hmset(name, mapping):多键新增/修改。

    ①eg:conn.hmset('stu2', {'name': 'tom', 'age': 18})

  4、conn.hmget(name, keys, *args):获取多键值,返回列表。

    ①eg:conn.hmget('stu2', 'name', 'age')

    ②eg:conn.hmget('stu2', ['name', 'age'])

  5、conn.hgetall(name):获取所有键值,返回字典。

    ①eg:conn.hgetall('stu1')

  6、conn.hlen(name):获取键的个数。

    ①eg:conn.hlen('stu1')

  7、conn.hkeys(name):获取所有键,返回列表。

    ①eg:conn.hkeys('stu1')

  8、conn.hvals(name):获取所有值,返回列表。

    ①eg:conn.hvals('stu1')

  9、conn.hexists(name, key):判断指定键是否存在。

    ①conn.hexists('stu1', 'age')

  10、conn.hdel(name, key) :删除指定键。

    ①conn.hdel('stu1', 'age')

  11、conn.hincrby(name, key, amount=1):累加。

    ①key:必须为纯数字。

    ②key:不存在则新建。

    ②amount:步长,默认为1,负数累减。

  12、conn.hincrbyfloat(name, key, amount=1.0):小数累加,步长可为小数。

  13、conn.hscan(name, cursor=0, match=None, count=None):分页获取。

    ①eg:conn.hscan('stu1', cursor=0, match=None, count=None)

  14、conn.hscan_iter(name, match=None, count=None):分页获取生成器。

    ①eg:conn.hscan_iter('stu1', match=None, count=None)

五、list常用操作

  1、conn.lpush(name, *values):从左边加入若干个。

    ①列表不存在会新建。

    ②eg:conn.lpush('age_list', 1, 2, 3)

    ③eg:conn.lpush('age_list', *[1, 2, 3])

  2、conn.lpushx(name, value):从左边加入一个。

    ①列表不存在,则操作无效。

    ②eg:conn.lpushx('age_list', 6)

  3、conn.rpush(name, *values)和conn.rpushx(name, value):从右边加入若干个和加入一个。

  4、conn.llen(name):统计列表的元素个数。

    ①eg:conn.llen('age_list')。

  5、conn.linsert(name, where, refvalue, value):从某值前后加入一个。

    ①eg:conn.linsert('age_list', 'before', 3, 22)

    ②eg:conn.linsert('age_list', 'after', 3, 44)

  6、conn.lset(name, index, value):从某索引位置加入一个。

    ①eg:conn.lset('age_list', 0, 111)

  7、conn.lrem(name, count, value):从左边开始删除指定个数的指定值。

    ①count:负数从右边开始,为<0>代表所有。

    ②eg:conn.lrem('age_list', 0, 1)

  8、conn.lpop(name):从左边开始弹出一个。

    ①eg:conn.lpop('age_list')

  9、conn.rpop(name):从右边开始弹出一个。

  10、conn.lindex(name, index):获取指定索引的值。

    ①eg:conn.lindex('age_list', 3)

  11、conn.lrange(name, start, index):截取列表的一部分,返回列表,前闭后闭。

    ①eg:conn.lrange('age_list', 1, 3)

  12、conn.ltrim(name, start, index):截留列表的一部分,其余的删除,前闭后闭。

    ①eg:conn.ltrim('age_list', 1, 3)

  13、conn.blpop(keys, timeout=0)/conn.brpop(keys, timeout=0):阻塞式弹出。

    ①列表无值(列表不存在),则阻塞,直至有值可操作。

    ②timeout:阻塞等待时间,<0>代表无限。

  14、conn.rpoplpush(src, dst):弹移。

    ①src:从原列表右侧弹出一个。

    ②dst:弹出的元素从左侧加入目标列表。

    ③eg:conn.rpoplpush('agr_list', 'tar_list')

  15、conn.brpoplpush(src, dst):阻塞式弹移。

  16、自定义分页获取列表数据:

def scan_list(name, count=2):  # 默认每页显示2条
    index = 0  # 从第一个数据开始
    while True:
        data_list = conn.lrange(name, index, count + index - 1)  # 从左边开始截取2条
        if not data_list:  # 截取不到则停止
            return
        index += count
        if index == count:
            print('第一页')
        else:
            print('下一页')
        for item in data_list:
            yield item


for age in scan_list('age_list', count=3):
    print(age)

六、其他通用常用操作

  1、conn.delete(name):删除一条数据。

    ①eg:conn.delete('new_list')

  2、conn.exists(name):判断某条数据是否存在。

    ①eg:conn.exists('new_list')

  3、conn.keys(attern='*'):过滤查询。

    ①eg:conn.keys('dsb*') --- 查询以<dsb>开头的所有key。

  4、conn.expire(name, time):设置过期时间,单位为<秒>。

    ①eg:conn.expire('age_list', 5)  

  5、conn.type(name):查看某条数据的类型。

    ①eg:conn.type('age_list')

七、redis管道

  1、简介:redis没有专门的事务机制,但是可以通过管道来实现事务的效果。

  2、代码:

pipe = conn.pipeline(transaction=True)  # 生成管道对象
pipe.multi()  # 声明管道可放多条指令
pipe.set('name', 'tom')  # 向管道投放任务
pipe.set('age', 18)
pipe.execute()  # 所有任务投放完毕,执行该行,所有任务会统一执行,若有一条异常,则都不生效

 

posted on 2020-07-25 02:01  焚音留香  阅读(220)  评论(0编辑  收藏  举报