zoukankan      html  css  js  c++  java
  • python redis操作

    1、redis连接

    • redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
    • redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。同理,python的redis没有实现select命令。

    2. 安装redis

    pip install redis

    3. 连接redis

    连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。

    import redis   
    sr = StrictRedis(host='192.168.4.222', port=6379, db=6, decode_responses=True)

    4、redis基本命令 --  String

    1. set 

    set(name, value, ex=None, px=None, nx=False, xx=False)
    
    在Redis中设置值,默认,不存在则创建,存在则修改
    参数:
    ex,过期时间(秒)
    px,过期时间(毫秒)
    nx,如果设置为True,则只有name不存在时,当前set操作才执行
    xx,如果设置为True,则只有name存在时,当前set操作才执行
     sr.set('age', 18)
     sr.get('age')
     sr.set('sex', 'man', ex=5)
     sr.mset(k1='v1',k2='v2')
     sr.mget('k1', 'k2')

    2. 

    setex(name, value, time)
    设置值
    参数:
    time,过期时间(数字秒 或 timedelta对象)
    r.setex("fruit2", "orange", 5)
    print(r.get('fruit2'))  # 5秒后,取值就从orange变成None

    3. 

    mset(*args, **kwargs)
    批量设置值
    r.mset(k1="v1", k2="v2") # 这里k1 和k2 不能带引号 一次设置对个键值对
    print(r.mget("k1", "k2"))   # 一次取出多个键对应的值
    print(r.mget("k1"))

    4.

    getrange(key, start, end)
    获取子序列(根据字节获取,非字符)
    参数:
    name,Redis 的 name
    start,起始位置(字节)
    end,结束位置(字节)
    127.0.0.1:6379[6]> set aa wewewrwetwetwet
    OK
    127.0.0.1:6379[6]> getrange aa 0 -1
    "wewewrwetwetwet"
    127.0.0.1:6379[6]> getrange aa 0 2
    "wew"

    5. 

    setrange(name, offset, value)
    修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
    参数:
    offset,字符串的索引,字节(一个汉字三个字节)
    value,要设置的值
    127.0.0.1:6379[6]> setrange aa 3 xxxxx
    (integer) 15
    127.0.0.1:6379[6]> get aa
    "wewxxxxxtwetwet"

    6. 

    strlen(name)
    返回name对应值的字节长度(一个汉字3个字节)
    127.0.0.1:6379[6]> strlen aa
    (integer) 15

    7. 

    append(key, value)
    在redis name对应的值后面追加内容
    参数:
    key, redis的name
    value, 要追加的字符串
    127.0.0.1:6379[6]> append aa yyyyy
    (integer) 20
    127.0.0.1:6379[6]> get aa
    "wewxxxxxtwetwetyyyyy"

     5. redis基本命令 -- hash

    1. 

    hset(name, key, value)
    r.hset("hash1", "k1", "v1")
    r.hset("hash1", "k1", "v1")
    r.hset("hash1", "k2", "v2")
    print(r.hkeys("hash1")) # 取hash中所有的key
    print(r.hget("hash1", "k1"))    # 单个取hash的key对应的值
    print(r.hmget("hash1", "k1", "k2")) # 多个取hash的key对应的值
    r.hsetnx("hash1", "k2", "v3") # 只能新建
    print(r.hget("hash1", "k2"))

    2. 

    hmset(name, mapping)
    在name对应的hash中批量设置键值对
    参数:
    name,redis的name
    mapping,字典,如:{'k1':'v1', 'k2': 'v2'}
    r.hmset("hash2", {"k2": "v2", "k3": "v3"})

    3. 

    hget(name,key)
    在name对应的hash中获取根据key获取value
    hmget(name, keys, *args)
    在name对应的hash中获取多个key的值
    参数:
    name,reids对应的name
    print(r.hget("hash2", "k2"))  # 单个取出"hash2"的key-k2对应的value
    print(r.hmget("hash2", "k2", "k3"))  # 批量取出"hash2"的key-k2 k3对应的value --方式1
    print(r.hmget("hash2", ["k2", "k3"]))  # 批量取出"hash2"的key-k2 k3对应的value --方式2

    4. 

    hgetall(name)
    获取name对应hash的所有键值
    a = sr.hgetall('hash2')
    print(a)
    {'k2': 'v2', 'k3': 'v3'}

    5. 

    hlen(name)
    获取name对应的hash中键值对的个数
    print(sr.hlen('hash2'))

    6. 

    hkeys(name)
    获取name对应的hash中所有的key的值
    print(sr.hkeys('hash2'))
    ['k3', 'k2']

    7. 

    hvals(name)
    获取name对应的hash中所有的value的值
    print(sr.hvals('hash2'))
    ['v3', 'v2']

    8. 

    判断成员是否存在(类似字典的in)
    hexists(name, key)
    检查name对应的hash是否存在当前传入的key
    print(r.hexists("hash1", "k4"))  # False 不存在
    print(r.hexists("hash1", "k1"))  # True 存在

    9.

    删除键值对
    hdel(name,*keys)
    将name对应的hash中指定key的键值对删除
    sr.hdel("hash2", "k2")

    6 . redis基本命令 -- list

    1. 

    增加(类似于list的append,只是这里是从左边新增加)--没有就新建
    lpush(name,values)
    在name对应的list中添加元素,每个新的元素都添加到列表的最左边
    r.lpush("list1", 11, 22, 33)
    print(r.lrange('list1', 0, -1))
    r.rpush("list2", 11, 22, 33)  # 表示从右向左操作
    print(r.llen("list2"))  # 列表长度
    print(r.lrange("list2", 0, 3))  # 切片取出值,范围是索引号0-3

     2. 

    往已经有的name的列表的左边添加元素,没有的话无法创建
    lpushx(name,value)
    在name对应的list中添加元素,只有name已经存在时,值添加到列表的最左边
    r.lpushx("list10", 10)   # 这里list10不存在
    print(r.llen("list10"))  # 0
    print(r.lrange("list10", 0, -1))  # []

    3. 

    往已经有的name的列表的右边添加元素,没有的话无法创建
    r.rpushx("list2", 99)   # 这里"foo_list1"之前已经存在,往列表最右边添加一个元素,一次只能添加一个
    print(r.llen("list2"))  # 列表长度
    print(r.lrange("list2", 0, -1)) # 切片取出值,范围是索引号0到-1(最后一个元素)

    4.

    .新增(固定索引号位置插入元素)
    linsert(name, where, refvalue, value))
    在name对应的列表的某一个值前或后插入一个新值
    参数:
    name,redis的name
    where,BEFORE或AFTER
    refvalue,标杆值,即:在它前后插入数据
    value,要插入的数据
    r.linsert("list2", "before", "11", "00")   # 往列表中左边第一个出现的元素"11"前插入元素"00"
    print(r.lrange("list2", 0, -1))   # 切片取出值,范围是索引号0-最后一个元素

    5. 

    .修改(指定索引号进行修改)
    r.lset(name, index, value)
    对name对应的list中的某一个索引位置重新赋值
    参数:
    name,redis的name
    index,list的索引位置
    value,要设置的值
    r.lset("list2", 0, -11)    # 把索引号是0的元素修改成-11
    print(r.lrange("list2", 0, -1))

    6.

    删除(指定值进行删除)
    r.lrem(name, value, num)
    在name对应的list中删除指定的值
    参数:
    name,redis的name
    value,要删除的值
    num, num=0,删除列表中所有的指定值;
    num=2,从前到后,删除2个; num=1,从前到后,删除左边第1个
    num=-2,从后向前,删除2个
    r.lrem("list2", "11", 1)    # 将列表中左边第一次出现的"11"删除
    print(r.lrange("list2", 0, -1))
    r.lrem("list2", "99", -1)    # 将列表中右边第一次出现的"99"删除
    print(r.lrange("list2", 0, -1))
    r.lrem("list2", "22", 0)    # 将列表中所有的"22"删除
    print(r.lrange("list2", 0, -1))

    7.

    删除并返回
    lpop(name)
    在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
    更多:
    rpop(name) 表示从右向左操作
    r.lpop("list2")    # 删除列表最左边的元素,并且返回删除的元素
    print(r.lrange("list2", 0, -1))
    r.rpop("list2")    # 删除列表最右边的元素,并且返回删除的元素
    print(r.lrange("list2", 0, -1))

    8.

    取值(根据索引号取值)
    lindex(name, index)
    在name对应的列表中根据索引获取列表元素
    print(r.lindex("list2", 0))  # 取出索引号是0的值

    7. redis基本命令 -- Set

    参考:https://www.jianshu.com/p/2639549bedc8

    http://python.jobbole.com/87305/

  • 相关阅读:
    ubuntu-14.04.2-desktop-amd64.iso:ubuntu-14.04.2-desktop-amd64:安装Oracle11gR2
    ubuntu-15.04-desktop-amd64.iso:ubuntu-15.04-desktop-amd64:安装Oracle11gR2
    Ubuntu 使用文件 casper-rw 镜像文件 保存变更内容
    continue — Skip to the next iteration of a loop in a shell script
    Is there a TRY CATCH command in Bash
    tar 打包压缩
    oracle 重复只保留一条
    sed 删除 51, 54 行 输出到原文件
    ORA-01000: maximum open cursors exceeded
    Oracle 在字符串中输入单引号或特殊字符
  • 原文地址:https://www.cnblogs.com/yuqiangli0616/p/9909398.html
Copyright © 2011-2022 走看看