200109-Python redis使用手册上篇

文章目录
  1. 0. 准备篇
  2. 1. redis连接
  3. 2. String
  4. 3. List
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • 本文可作为redis的操作指南,介绍redis命令对应的python使用姿势

    0. 准备篇

    首先需要一个redis环境,安装过程,可以参考: redis-环境安装

    其次python3 环境安装,可以参考博文:python 运行环境搭建

    redis模块安装

    1
    pip install redis

    1. redis连接

    直接连接

    1
    2
    3
    import redis

    conn = redis.Redis(host='127.0.0.1', port=6379, password='')

    主要是三个参数,host + port + password

    需要注意一点,当我们需要连接的redis不在本机时,请确保redis的配置是开启了外部访问的,否则会提示连接失败

    连接池方式

    连接池的方式最大的好处是每次需要获取连接时,从连接池中获得一个可用连接,用完之后不会立马释放,而是扔回到连接池,以实现连接的复用,避免频繁的redis连接的创建和释放

    1
    2
    3
    4
    import redis

    pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='')
    conn = redis.Redis(connection_pool=pool)

    2. String

    首先介绍Redis基本数据结构中String的操作姿势

    添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # name 为redis对应的key
    # value 为redis对应的value
    # ex 过期时间(s)
    # px 过期时间(ms)
    # nx true : 表示在key不存在时,set操作成功; false 时表示不管咋地都写入
    # xx true : 表示在key存在时,set操作才成功
    redis.client.Redis#set(name, value, ex=None, px=None, nx=False, xx=False)


    # 带失效时间的设置
    # name -> redisKey
    # value -> redisValue
    # time -> 过期时间,s
    redis.client.Redis#setex(name, time, value)

    # 带失效时间的设置,与上面的区别在于参数的时间为ms
    redis.client.Redis#psetex(name, time_ms, value)

    # key不存在时,才写入
    redis.client.Redis#setnx(name, value)

    # 批量写入,传入字典
    redis.client.Redis#mset(dict)

    获取

    注意下面获取的结果类型为byte,使用的时候需要转换成目标对象

    1
    2
    3
    4
    5
    # 获取数据
    redis.client.Redis#get(name)

    # 批量获取数据,注意返回列表,与传入的keys根据数组的下标进行对应;如果某个key不存在,返回None
    redis.client.Redis#mget(keys)

    实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import time

    import redis

    conn = redis.Redis(host='127.0.0.1', port=6379, password='')


    def str_demo():
    # 基本的写入 读取操作
    ans = conn.set('test', 1234)
    print(ans)

    # 请注意返回的结果为byte类型
    ans = conn.get('test')
    print(ans.decode('utf8'))

    # 不存在时,才写入成功,此时应该返回false
    ans = conn.setnx('test', 4567)
    print(f'{ans}==False')

    ans = conn.setex('test', 1, 'abc')
    ret = conn.get('test')
    time.sleep(1)
    ret2 = conn.get('test')
    print(f'{ans}|{ret}==abc|{ret2}==blank')

    conn.mset({'t1': 1, 't2': 2, 't3': 3, 't4': 4})
    ans = conn.mget('t1', 't3', 't5', 't4', 't2')
    print(f"mget: {ans}")


    str_demo()

    输出结果

    1
    2
    3
    4
    5
    True
    1234
    False==False
    True|b'abc'==abc|None==blank
    mget: [b'1', b'3', None, b'4', b'2']

    请注意一下上面的mget返回结果,与传入的keys是通过数组小标进行关联的

    3. List

    数据结构为列表,支持左添加,右添加

    添加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 在列表左边添加数据,value可以是多个,最右边的参数,在最终列表的最左边
    lpush(key, v1, v2...)
    # 在列表的右边添加数据,value可以有多个,最右边的参数,在最终列表的最右边
    rpush(key, v1, v2...)

    # 在列表的最左边,添加一个数据
    lpushex(key, value)
    # 在列表的最右边,添加一个数据
    rpushex(key, value)


    # 修改列表中index索引的值,替换为 newValue
    lset(key, index, newValue)

    # 查找 originValue, 在它的左边/右边(由where参数决定)插入一个 newValue
    linsert(key, where, originValue, newValue)

    获取

    1
    2
    3
    4
    5
    # 获取某个位置的元素
    lindex(key, index)

    # 获取索引为 start -> end 的所有值,end为-1时,表示最右边一个
    lrange(key, start, end)

    删除

    1
    2
    3
    4
    5
    6
    # 删除最左边的
    lpop(key)
    # 删除指定的value,如果num为0,表示删除所有的value;如果大于0,表示从左到右删除num个;小于从右到做删除num个
    lrem(key, value, num)
    # 移除不再索引内的所有值
    ltrim(key, start, end)

    实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

    def list_demo():
    key = "l_test"
    conn.delete(key)
    # 批量添加,3在最右边,返回列表长度
    conn.lpush(key, 1, 2, 3)
    ans = conn.lpushx(key, 'head')
    print(ans)

    conn.rpush(key, 'a', 'b')
    conn.rpushx(key, 'tail')

    ans = conn.lrange(key, 0, -1)
    print(ans)

    # 更新索引为2的值
    conn.lset(key, 2, 'update')
    conn.linsert(key, 'after', 'update', 'insert')
    ans = conn.lrange(key, 0, -1)
    print(ans)

    # 返回并删除最左边的元素
    ans = conn.lpop(key)
    print(f"{ans}==head")

    # 保留索引在闭区间[1,3]的元素
    conn.ltrim(key, 1, 3)
    ans = conn.lrange(key, 0, -1)
    print(ans)

    list_demo()

    输出结果

    1
    2
    3
    4
    5
    4
    [b'head', b'3', b'2', b'1', b'a', b'b', b'tail']
    [b'head', b'3', b'update', b'insert', b'1', b'a', b'b', b'tail']
    b'head'==head
    [b'update', b'insert', b'1']

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×