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/

  • 相关阅读:
    【Language】 TIOBE Programming Community Index for February 2013
    【diary】good health, good code
    【web】a little bug of cnblog
    【Git】git bush 常用命令
    【web】Baidu zone ,let the world know you
    【diary】help others ,help yourself ,coding is happiness
    【Git】Chinese messy code in widows git log
    【windows】add some font into computer
    SqlServer启动参数配置
    关于sqlserver中xml数据的操作
  • 原文地址:https://www.cnblogs.com/bbiu/p/14107211.html
Copyright © 2011-2022 走看看