zoukankan      html  css  js  c++  java
  • Redis数据类型

    Redis数据类型

    Redis是种key—value的存储系统

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

    # 字符串(string)
    	{"key": 123}
    # 列表(list)
    	{"key":[1,2,3]}
    # 集合(set)
    	{"key":{1,2,3}}
    # 有序集合(zset)/sorted set
    	{"key":{("a",20),("b",15)}}
    #  哈希(hash)
    	{"key": {"name":"bxb", "age":18}}
    

    1. String/字符串

    String 是 Redis 的基本类型

    String类型是二进制的,可以包含任何数据(最大值512M),如图片或者序列化的对象

    内存中按 name—value来存储:{"key": 123}

    常用操作 python命令 备注
    set set(name, value, ex=None, px=None, nx=False, xx=False)
    参数: ex -设置键key的过期时间,单位秒
    参数: px milliseconds -设置键key的过期时间,单位毫秒
    参数:nx -只有key不存在时才设置key的值
    参数:xx -只有ket存在时才设置key的值
    例:rdb.set("A", "aa", ex=100)
    设置 name-value,key不存在创建, 存在修改value
    get get(name)
    例:rdb.get('A')
    获取 name对应的 value,key不存在时返回空
    mset mset(mapping)
    例:rdb.mset({"age": 18, "sex": "men"})
    批量设置值
    mget mget(keys, *args)
    例:rdb.mget("age", "sex")
    例:rdb.mget(["age", "sex"])
    批量获取值,输出为数组[18,"men"]
    getset getset(name, value)
    例:rdb,getset("age", 20)
    设置新值并获取原来的值
    getrange getrange(name, start, end)
    例:getrange("sex", 0, 1)
    注:start/end均以字节计算
    获取 name 对应的 value[start, end]的切片, 输出为"me"
    setrange setrange(name, offset, value)
    例:rdb.setrabfe("sex", 0, "women")
    注:offset以字节计算
    修改 name 对应的 value 值,从指定字符串索引开始向后替换(新值太长时,则覆盖向后添加)
    getbit getbit(name, offset)
    例:rdb.getbit("sex", 5)
    注:offset以字节计算
    获取 name 对应的 value[offset] 二进制值,输出0/1
    setbit setbit(name, offset, value)
    例:rdb.setbit("sex", 5, 1)
    注:offset以字节计算
    修改 name 对应的 value[offset] 二进制值,value只能是0/1
    bitcount bitcount(key, start=None, end=None)
    注:start/end均以字节计算
    获取 key 对应的 value[start, end] 二进制值中 1 的个数
    bitop bitop(operation, dest, *keys)
    参数:operation:AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)
    参数:dest:新的Redis的name
    参数:*keys:要查找的Redis的name
    例:bitop("AND", 'new_name', 'n1', 'n2', 'n3')
    例:获取Redis中n1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中
    获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值
    strlen strlen(name) 返回 name 对应 value 值的字节长度
    incr incr(self, name, amount=1)
    参数:amount自增数,整数型
    自增 name对应的 value 值,当name不存在时,创建name=amount,否则,则自增。
    incrbyfloat incrbyfloat(self, name, amount=1.0)
    参数:amount自增数,浮点型
    自增 name对应的 value 值,当name不存在时,创建name=amount,否则,则自增。
    decr decr(self, name, amount=1)
    参数:amount自减数,整数型
    自减 name 对应的 value 值,当name不存在时,则创建name=amount,否则,则自减。
    append append(key, value) 在 name 对应 value 值后面追加内容

    2. List/列表

    List 是简单的字符串列表

    List 最多可存储 232 - 1 元素

    内存中按 key—list 来存储:{"key":[1,2,3]}

    常用操作 Python命令 备注
    lpush lpush(name,values)
    例:rdb.lpush("A", 1,2,3) > {"A": [3,2,1]}
    设置 name 对应的 list 中添加新元素,每个元素都会添加到最左边
    rpush rpush(name,values)<b
    例:rdb.rpush("B", 4,5) > {"B": [4,5]}
    设置 name 对应的 list 中添加新元素,每个元素都会添加到最右边
    lpushx(name,value)
    lset r.lset(name, index, value)
    参数:index 列表索引
    例:rdb.lset("A", 0, 5)
    修改 name 对应的 list 中的某一个索引位置的值
    llen llen(name)
    例:rdb.llen("A")
    获取 name 对应 list 的长度(元素个数)
    linset linsert(name, where, refvalue, value))
    参数:where BEFORE或AFTER
    参数:refvalue 在它前后插入数据(如果存在多个,以找第一个为准)
    例:rdb.linsert('A', 'before', 1, 5) 在[2,1]元素1之前插入5
    在 name 对应的 list 的某一个值前或后插入一个新值
    lindex lindex(name, index)
    例:rdb.lindex("A", 2)
    获取 name 对应 list 中根据索引元素
    lpop lpop(name)
    例:rdb.lpop("A")
    获取 name 对应 list 中左侧第一个元素并在列表中移除
    rpoplpush rpoplpush(src, dst)
    参数:src 获取数据的name
    参数:dst 添加数据的name
    例:rdb("A", "B")
    将 src 对应 list 中最右边的元素,添加至 dst 对应 list 的最左边
    blpop blpop(keys, timeout)
    参数:keys name集合
    参数:timeout 超时时间,所有元素均取完之后,阻塞等待新值,0表示永远阻塞
    例:blpop(("A", "B"), 2)
    将多个 list 排列,按照从左到右去pop对应列表的元素
    brpop brpop(keys, timeout)
    参数:keys name集合
    参数:timeout 超时时间,所有元素均取完之后,阻塞等待新值,0表示永远阻塞
    例:blpop(("A", "B"), 2)
    将多个 list 排列,按照从右到左去pop对应列表的元素
    lrem r.lrem(name, value, num)
    参数:num 从前向后删除num个value,0代表删除所有value
    例:rdb.lrem("A", 5, 3)
    删除 name对 应的 list 中指定的值
    ltrim ltrim(name, start, end)
    参数:statr 起始索引
    参数:end 结束索引
    例:rdb.ltrim("A", 0, -1)
    将 name 对应的 list 没有在start-end索引之间的值移除

    3. Set/集合

    Set 是 string 类型的无序集合

    内存中按 key—set 来存储:{"key":{1,2,3}}

    常用操作 Python命令 备注
    sadd sadd(name, values)
    例:rdb.sadd("a_name", 7, 8, 9)
    设置 name 对应的 set 中添加元素, 每个元素都在最右边(尾)
    scard scard(name)
    例:rdb.scard("a_name")
    获取 name 对应 set 中的元素个数
    sdiff sdiff(keys, *args)
    例:rdb.sdiff("a_name", "b_name")
    获取第一个 key 对应的 set 元素, 且不在其他 key 对应的 set 中的元素
    sdiffstore sdiffstore(dest, keys, *args)
    参数:dest 新集合key
    例:rdb.sdiffstore("c_name", "b_name", "a_name")
    获取第一个 key 对应的 set 元素, 且不在其他 key 对应的 set 中的元素,将其加入到新的 dest 对应的集合中
    sinter sinter(keys, *args)
    rdb.sinter("a_name", "b_name")
    获取多个 key 对应的 set 交集
    sinterstore sinterstore(dest, keys, *args)
    参数:dest 新集合key<b
    例:rdb.sinterstore("d_name", "a_name", "b_name")
    获取多个 key 对应的 set 交集,将其加入到新的 dest 对应的新集合中
    sismember sismember(name, value)
    例:rdb.sismember("a_name", 1)
    判断 name 对用的 set 中是否有 value
    smembers smembers(name)
    例:rdb.smembers("a_name")
    获取 name 对应 set 的所有元素
    smove smove(src, dst, value)
    参数:src 源集合 name
    参数:dst 目标集合 name
    例子:rdb.smove("a_name", "b_name", 9)
    将 src 对应 set 的中 value, 移动到 dst 对应的 set 中
    spop spop(name)
    例:edb.spop("a_name")
    将 name 对应 set 右边(尾)的元素移除,并返回
    srandmember srandmember(name, numbers)
    例子:rdb.srandmember("a_name", 5)
    从 name 对应的 set 中随机获取 numbers 个元素
    srem srem(name, values)
    例:rdb.srem("a_name", 7, 9)
    删除 name 对应 set 中对应的 values
    sunion sunion(keys, *args)
    例:rdb.sunion("a_name", "b_name")
    获取多个 key 对应的 set 并集
    sunionstore sunionstore(dest,keys, *args)
    例:rdb.sunionstore("a_name", "b_name")
    获取多个 key 对应的 set 并集,将其加入到新的 dest 对应的新集合中
    sscan sscan(name, cursor=0, match=None, count=None)
    参数:name 集合键名称
    参数:cursor 游标(基于游标取值)
    参数:match 匹配指定key, None表示所有key
    参数:count 每次且切片最少获取的个数
    增量式迭代获取,sscan实现分片的获取数据,并非一次性将数据全部获取完,从而防止内存被撑爆
    sscan_iter sscan_iter(name, match=None, count=None)
    参数:name 哈希建名称
    参数:match 匹配指定key,默认None 表示所有的key
    参数:count 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    利用yield封装sscan创建生成器,实现分批去redis中获取数据

    4. zset/有序集合

    zset 是 string 类型的无序集合

    对于有序集合,每一个元素有两个值,即:值和分数,分数专门用来做排序

    内存中按 key—list 来存储:{"key":{("a",20),("b",15)}}

    命令 Python操作 备注
    zadd zadd(name, *args, **kwargs)
    例:rdb.zadd("zset_name", {"a":1, "b":3})
    在 name 对应的 zset 中添加元素
    zcard zcard(name)
    例:rdb.zcard("zset_name")
    获取 name 对应的 zset 中的元素个数
    zcount zcount(name, min, max)
    例:rdb.zcount("zset_name", 0, 3)
    获取 name 对应的 zset 中分数在 [min, max] 之间元素的个数
    zincrby zincrby(name, amount, value)
    参数:amount 自增数
    例:rdb.zincrby("zset_name", 5, "a")
    自增 name 对应的 zset 中的 value 的分数
    zrange zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
    参数:name 有序集合键名称
    参数:start 有序集合索引起始位置(非分数)
    参数:end 有序集合索引结束位置(非分数)
    参数:desc 排序规则,默认按照分数从小到大排序
    参数:withscores 是否获取元素的分数,默认只获取元素的值
    参数:score_cast_func 对分数进行数据转换的函数
    例:rdb.zrange('zset_name', 4, 5, desc=False, withscores=True, score_cast_func=float)
    对 name 对应的 zset 按照 desc 规则排序分数之后获取 [start, end] 之间的值
    zrevrange zrevrange(name, start, end, withscores=False, score_cast_func=float)
    参数:name 有序集合键名称
    参数:start 有序集合索引起始位置(非分数)
    参数:end 有序集合索引结束位置(非分数)
    参数:withscores 是否获取元素的分数,默认只获取元素的值
    参数:score_cast_func 对分数进行数据转换的函数
    例:rdb.zrevrange("zset_name", 0,1)
    对 name 对应的 zset 按照从大到小规则排序分数之后获取 [start, end] 之间的值
    zrangebyscore zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
    参数:name 有序集合键名称
    参数:min 最小分数值
    参数:max 最大分数值
    参数:start 返回结果起始位置
    参数:num 返回结果数量
    参数:withscores 是否获取元素的分数,默认只获取元素的值
    参数:score_cast_func 对分数进行数据转换的函数
    例:rdb.zrangebyscore("zset_name", 5, 10, start=2, num=3)
    注:获取 zset_name 的 zset 中分数在5~10之间,且从 索引2 开始取值,取3个
    按照分数范围获取name对应的有序集合的元素,之后按分数从大到小排序
    zrevrangebyscore zrevrangebyscore(name, max, min, start=None, num=None, withscores=False, score_cast_func=float)
    参数:name 有序集合键名称
    参数:max 最大分数值
    参数:min 最小分数值
    参数:start 返回结果起始位置
    参数:num 返回结果数量
    参数:withscores 是否获取元素的分数,默认只获取元素的值
    参数:score_cast_func 对分数进行数据转换的函数
    按照分数范围获取name对应的有序集合的元素,之后按分数从小到大排序
    zrem zrem(name, values)
    例:rdb.zrem("zset_name", "a", "b")
    删除 name 对应 zset 中的 values 元素们
    zremrangebyrank zremrangebyrank(name, min, max) 根据排行范围删除
    zremrangebyscore zremrangebyscore(name, min, max) 根据分数范围删除
    zremrangebylex zremrangebylex(name, min, max) 根据值返回删除
    zscore zscore(name, value) 获取name对应 zset 中 value 对应的分数
    zinterstore zinterstore(dest, keys, aggregate=None)
    参数:aggregate的值为: SUM MIN MAX
    获取两个有序集合的交集,如果遇到相同值不同分数,则按照aggregate进行操作
    zunionstore zunionstore(dest, keys, aggregate=None)
    参数:aggregate的值为: SUM MIN MAX
    获取两个有序集合的并集,如果遇到相同值不同分数,则按照aggregate进行操作
    zscan zscan(name, cursor=0, match=None, count=None, score_cast_func=float)
    参数:name 哈希建名称
    参数:cursor 游标(基于游标分批取获取数据)
    参数:match 匹配指定key,默认None 表示所有的key
    参数:count 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    参数:score_cast_func 对分数进行数据转换的函数
    增量式迭代获取,zscan实现分片的获取数据,并非一次性将数据全部获取完,从而防止内存被撑爆
    zscan_iter zscan_iter(name, match=None, count=None,score_cast_func=float)
    参数:name 哈希建名称
    参数:match 匹配指定key,默认None 表示所有的key
    参数:count 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    参数:score_cast_func 对分数进行数据转换的函数
    利用yield封装zscan创建生成器,实现分批去redis中获取数据

    5. Hash/哈希

    Hash 是一个 string 类型的 field 和 value 的映射表

    内存中按 key—dict 存储:{"key": {"name":"A", "age":18}}

    命令 Python操作 备注
    hset hset(name, key, value)
    例:rdb.hset("h_name", "age", 18)
    name 对应的 hash中 设置一个键值对(不存在创建,存在修改)
    hmset hmset(name, mapping)
    例:rdb.hmset("h_name", {"sex": "man"})
    在 name 对应的 hash 中批量设置键值对
    hget hget(name,key)
    例:rdb.hget("h_name", "age")
    在 name 对应的 hash 中获取根据 key 获取 value
    hmget hmget(name, keys, *args)
    例:rdb.hmget("h_name", "age", "sex")
    例:rdb.hmget("h_mange", ["age", "sex"])
    在 name 对应的 hash 中获取多个 key 的值
    hgetall hgetall(name)
    例:rdb.hegtall("h_name")
    获取 name 对应的 hash 中所有的键值
    hlen hlen(name)
    例:rdb.hlen("h_name")
    获取 name 对应的 hash 中键值对的个数
    hkeys hkeys(name)
    例:rdb.hkeys("h_name")
    获取 name 对应 hash 中所有 keys
    hvals hvals(name)
    例:rdb.hvals("h_name")
    获取 name 对应 hash 中所有的 values
    hexists hexists(name, key)
    例:rdb.hexists("h_name", "name")
    判断 name 对应 hash 中是否有 key
    hdel hdel(name,*keys)
    例:rdb.hdel("h_name", "name", "age")
    删除 name 对应 hash 中指定的键值对
    hincrby hincrby(name, key, amount=1)
    参数:amount 自增数(整型)
    例:rdb.hincrby("dic_name", "age", amount=10)
    自增 name 对应 hash 中, key 对应的值(不存在创建key=amoount)
    hincrbyfloat hincrbyfloat(name, key, amount=1.0)
    参数:amount 自增数(浮点型)
    例:rdb.hincrbyfloat("h_name", "age", amount=2.0)
    自增 name 对应 hash 中, key 对应的值(不存在创建key=amoount)
    hscan hscan(name, cursor=0, match=None, count=None)
    参数:name 哈希建名称
    参数:cursor 游标(基于游标分批取获取数据)
    参数:match 匹配指定key,默认None 表示所有的key
    参数:count 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    注意:返回结果为cursor, data;当cursor为0是,表示数据获取完毕
    增量式迭代获取,hscan实现分片的获取数据,并非一次性将数据全部获取完,从而防止内存被撑爆
    hscan_iter hscan_iter(name, match=None, count=None)
    参数:name 哈希建名称
    参数:match 匹配指定key,默认None 表示所有的key
    参数:count 每次分片最少获取个数,默认None表示采用Redis的默认分片个数
    利用yield封装hscan创建生成器,实现分批去redis中获取数据

    参考链接:https://www.redis.com.cn/

  • 相关阅读:
    list和set的区别
    tcp与udp协议的区别
    c3p0的数据库连接池
    mysql的连接
    HAVING 的使用 及笛卡尔积
    break-跳出内循环
    求素数(范围自改)
    1-100累加
    1-100累乘
    类实例:飞机大战
  • 原文地址:https://www.cnblogs.com/bbiu/p/14107211.html
Copyright © 2011-2022 走看看