美文网首页
Redis支持的五种常见数据结构

Redis支持的五种常见数据结构

作者: 拾柒_梦晓 | 来源:发表于2019-01-06 19:53 被阅读0次
strings字符串
  • APPEND key value
    如果key存在,并且值为字符串,name这个命令会把value追加到原来的(value)结尾;
    如果key不存在,那么这个命令将创建一个空字符串的key,再执行追加操作。(类似set操作)
redis>append user:1 user1
(integer) 14 返回的值时追加字符串值(value)的长度
  • BITCOUNT key [start end]
    统计字符串被设置为1的bit数
    内存计算:单位换算8BIT = 1B;1024B = 1MB
    start表示开始位置 1 byte = 8bit
    end表示结束位置 1byte = 8bit
bitcount key 0 0
统计key的字符串被设置的二进制位1的bit数0~7位置
bitcount key 0 1
0~15位置上bit为1的个数
bitcount key 1 1
8~15位置上bit为1的个数
依此类推..
  • GETBIT key offset
    返回key对应的string在offset位置处的bit值;
    当offset超出字符串长度的位置时,使用0bit进行填充,返回0;
    当key不存在,offset返回的值为0

  • SETBIT key offset value
    设置或者清空key的value值,在offset位置处的bit值;
    value只能是0/1;
    返回值:offset位置处旧的值

  • DECR key (记忆法则:decrease-减少)
    对key对应的数值做减1操作;
    如果key不存在,操作时key的值被置为0;
    如果key的value类型报错,就返回错误;
    返回结果:减少之后的value值;

  • DECRBY key decrement
    将key对应的数值减少decrement。
    如果key不存在,操作时候key的值会被置为0;
    如果key的value类型错误,就返回错误;
    返回结果:减少之后的value值;

  • GET key
    返回key的value。
    如果key不存在,返回特殊值nil;
    如果 key的value不是string,就返回错误;

  • GETRANGE key start end (记忆法则:range-范围)
    返回key对应的value字符串,范围由start和end决定;
    start:0表示索引为0,正数索引从1开始,负数表示从最后一位开始
    end:-1表示结束位置到右边末尾

  • GETSET key value
    将key的值设置为value;
    返回结果是旧的key对应的value值;

  • INCR key (记忆法则:increase-增加)
    将对应的key的值执行原子加1操作;
    返回结果,value加1后的值

  • INCRBY key increment
    将对应的key执行原子增加一个increment值
    返回结果,value加increment的结果

  • INCRBYFLOAT key increment
    执行原子增加一个浮点数

  • MGET key [key...] ("[]"括号中的为可选项)
    获取所有key的值

  • MSET key value [key value...]
    设置多个key value的值

  • MSETNX key value [key value...]
    设置多个key value,当key存在,则set不成功
    当key不存在,则set成功

  • PSETEX key milliseconds value
    设置key value的值并且设置过期时间;
    milliseconds 以毫秒为单位

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]
    设置key value的值

  • SETEX key seconds value
    设置key-value并设置过期时间(单位秒)

  • SETNX key value
    设置key value值,当key不存在时设置成功

  • STRLEN key
    获取key的指定长度

模拟打卡案例

redis> setbit user:1 0 1      用户1  第一天  打卡
redis> setbit user:1 1 1      用户1  第二天  打卡
redis> setbit user:1 2 1      用户1  第三天  打卡
redis> setbit user:1 3 1      用户1  第四天  打卡
redis> setbit user:1 4 0      用户1  第五天  未打卡
redis> getbit user:1 0        获取用户1  第一天   是否打卡=打卡
redis> getbit user:1 4        获取用户1  第五天   是否打卡=未打卡
redis> bitcount user:1        获取用户1  总打卡次数   4次
redis> bitcount user:1 0 0    获取用户1  1~8天  是否打卡总次数  4次
redis> bitcount user:1 1 1    获取用户1  8~16天  是否打卡总次数 0次 
lists列表
  • LPUSH key value [value ...]
    将所有指定的值插入到存储于key的列表的头部;
    如果key不存在,push操作前会创建一个空列表;
    注意多个value值依次按顺序插入列表的头部中;
    返回值:在push操作后的list长度

  • RPUSH key value [value ...]
    将所有指定的值插入到存储于key的列表的尾部;
    如果key不存在,push操作前会创建一个空列表;
    注意多个value值依次按顺序插入列表的尾部中;
    返回值:在push操作后的list长度

  • LRANGE key start stop
    返回存储在key的列表中指定范围内的元素;
    start和stop偏移基于0下标,第一个元素下标为0,第二个元素下标为1,以此类推;
    偏移可以为负数,最后一个元素下标为-1,倒数第二个元素小标为-2,以此类推;
    返回值:指定范围里的列表元素

  • LTRIM key start stop
    剪切一个已经存在的list,这样list就会只包含指定范围的指定元素;
    start和stop索引从0开始,范围包含start和stop的索引值;

  • LLEN key
    返回key中的list的长度;
    如果key不存在,那么就被看做空list,返回长度0;
    如果key不是一个list,返回错误;

  • LPOP key
    从key对应的list列表头部移除第一个元素;
    返回值:被移除的元素的值;

  • RPOP key
    从key对应的list列表尾部移除第一个元素;
    返回值:被移除的元素的值;

  • BLPOP key [key ...] timeout
    阻塞式从key对应的list列表中头部删除第一个元素;
    timeout:0表示一直等待,整数1~无穷大以为单位等待;
    返回结果:删除的列表key,及key对应列表中被删除的的元素值;
    阻塞时间只有等待才会返回阻塞时间;

  • BRPOP key [key ...] timeout
    阻塞式从key对应的list列表中尾部删除第一个元素;

  • BRPOPLPUSH source destination timeout
    阻塞式弹出一个列表的值,并将这个值推到另一个列表中;
    source:表示要从那个key对应的列表中尾部删除一个元素;
    destination:表示从那个key对应的列表中头部插入一个source中被删除的元素;
    timeout:预期的超时时间;

  • LINDEX key index
    获取一个元素,通过index索引获取对应位置元素值;

  • LINSERT key before|after pivot value
    将value的值插入到key对应的列表元素pivot的before|after;
    返回值:经过插入操作后的list的长度值;

  • LREM key count value
    移除key列表中value的值;
    count > 0:从头部往尾部移除count个value的元素
    count < 0:从未往头部移除值为count个value的元素
    count = 0:移除所有值为value的元素

  • LSET key index value
    给key对应的list列表的index位置设置value值;

  • RPOPLPUSH source destination
    移除source列表尾部第一个元素,并将移除的值添加到destination列表的头部的第一个元素;

点赞帖子案例

redis> set user:1:post:1 'hello redis' 创建用户1 帖子1 内容
redis> lpush post:1:good 'friend1'     帖子1 被好友1 点赞
redis> lpush post:1:good 'friend2'     帖子1 被好友2 点赞
redis> lpush post:1:good 'friend3'     帖子1 被好友3 点赞
redis> llen post:1:good                帖子1 被点赞次数
redis> lrange post:1:good 0 2          帖子1 被那些好友点赞 start stop控制范围

回帖案例

redis> set user:1:post:2 'wohenshuai'   创建一个帖子2
redis> set postreply:1 'nonono'         创建一个回帖1
redis> set postreply:2 'hehe'           创建一个回帖2
redis> lpush post:2:replies 1           回帖1 和 帖子2关联
redis> lpush post:2:replies 2           回帖2 和 帖子2关联
redis> lrange post:2:replies 0 -1       查看帖子2的回帖
redis> get postreply:1                  查看回帖1 内容
redis> get postreply:2                  查看回帖2 内容
sets集合
  • SADD key member [member]
    添加一个或多个指定的member元素的集合到key中;
    如果member有重复的值,那么如果存入一个,另外的直接被忽略;
    返回值是新添加到集合中的元素个数,不包括重复已存在的;

  • SREM key member [member ...]
    在key集合中移除指定的元素
    返回值:在key集合中被移除的元素个数

  • SISMEMBER key member
    判断member值在key集合中是否存在;
    返回值:存在/不存在 返回1/返回0

  • SMEMBERS key
    获取key集合中所有的元素;
    返回值:key集合中所有的元素,以list方式返回;

  • SCARD key (记忆法则:cardinal-基数)
    获取key集合的存储的基数(集合元素的数量)

  • SRANDMEMBER key [count]
    随机返回key集合中count个元素

  • SUNION key [key ...]
    返回给定的多个集合的并集中的所有元素;

  • SINTER key [key ...] (记忆法则:intersection-交集)
    返回指定所有的集合的元素的交集

  • SINTERSTORE destination key [key ...] (记忆法则:intersection-交集;store-存储)
    获取key集合的元素交集,并将交集的元素存储到destination集合中;

  • SDIFF key [key ...]
    返回一个集合与给定集合没有的元素

  • SDIFFSTORE destination key [key ...]
    第一个集合中去除后面集合中的元素,并返回一个新的集合;
    将新的集合元素存储到destination集合元素中

抽奖案例

初始化抽奖用户池:
redis>sadd luckdraws 'stef1' 'stef2' 'stef3' 'stef4' 'stef5' 'stef6' 'stef7' 'stef8' 'stef9' 'stef10' 'stef11' 'stef12'
redis>srandmember luckdraws 3          抽3个三等奖
redis>srem 'stef5' 'stef4' 'stef11'    移除中三等奖用户
redis>srandmember luckdraws 2          抽2个二等奖
redis>srem luckdraws 'stef9' 'stef7'   移除中二等奖用户
redis>srandmember luckdraws 1          抽1个一等奖

好友推荐可能认识的人案例

初始化好友用户组
redis>sadd user:1:friends 'user:2' 'user:3' 'user:5'
redis>sadd user:2:friends 'user:1' 'user:3' 'user:6'
redis>sadd user:3:friends 'user:1' 'user:7' 'user:8'
给user1推荐可能认识的好友
redis>sunionstore user:1:groups user:1:friends user:2:friends user:3:friends     对用户好友组进行组合
redis>sdiffstore ret:users user:1:groups user:1:friends   去除用户1中已经存在的好友
redis>srem ret:users 'user:1'     推荐好友中删除用户1自己
redis>srandmember ret:users 2     推荐好友中随机推荐2个给用户1
sorted sets有序集

SET是一种非常方法的结构,但是数据无序,redis提供了一个sorted set,每一个添加的值都有一个对应的分数,可以通过这个分数进行排序

  • ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
    添加到有序的set集合,key集合存储分数和成员;
    NX:不更新存在的成员,只添加新成员;
    XX:仅仅更新存在的成员,不添加新成员;
    CH:修改返回值为发生变化的成员总数,原始的返回新添加成员的总数。
    INCR:当ZADD指定这个选项时,成员的操作就等同zincrby命令,并对成员的分数进行递增操作;
  • ZRANGE key start stop [withscores]
    指定全包含的区间start和stop的key的集合元素,配置withscores,返回的集合包含分数;

  • ZCOUNT key min max
    获取指定key集合分数范围在min~max内的成员数量;

  • ZRANK key member
    获取指定key集合成员中的排列等级(排列的索引)

  • ZREVRANGE key start stop [WITHSCORES]
    获取指定范围区间start~stop在key集合元素中的成员,并且分数以递减方式进行排序的元素列表;
    配置withscores参数,列表中带有分数参数;

  • ZINCRBY key increment member
    设置key集合中member成员增加increment评分值;

游戏天梯排名

redis> zadd ladder 100 'stefE' 99 'stefA' 98 'stefB' 97 'stefD' 96 'stefC'        添加初始化天梯排名
redis> zrevrank ladder stefA        查询stefA在天梯的排名
redis> zrevrange ladder 0 2        查询天梯前三名
redis> zincrby ladder 20 'stefB'        stefB增加20等级
hashes散列

hashes可以理解为一个map,这个map由一对一的字段和值组成;
一般可以使用hashes来保存一个对象;

  • HSET key field value
    给key设置一个field和value的键值对;
    返回值:
    1:field是一个新的字段;
    0:field原来在map里面已经存在;

  • HGET key field
    获取key的map中的该字段所关联的值

  • HMSET key field value [field value]
    设置key的map中的多个字段和值;

  • HMGET key field [field ...]
    获取key的map中的多个field字段的值;

  • HGETALL key
    获取key的map中的所有的字段和值;
    返回值:字段名和值的list集合;

  • HINCRBY key field increment
    给指定的key的map的指定field字段的值增加increment;

  • HKEYS key
    获取指定key中的字段的名称的list集合;

  • HDEL key field [field ...]
    删除指定key的map中的指定的field字段(包含字段的值)

相关文章

网友评论

      本文标题:Redis支持的五种常见数据结构

      本文链接:https://www.haomeiwen.com/subject/oxcerqtx.html