Redis核心数据结构

1.String结构

  • 常用操作
    SET key value //存入字符串键值对
    MSET key value [key value …] //批量存入字符串键值对
    SETNX key value //存入一个不存在的字符串键值对
    MGET key [key …] //批量获取
    DEL key [key …] //删除一个键
    EXPIRE key seconds //设置过期时间(秒)

    INCR key //key存储的数字值加1
    DECR key //key存储的数字值减1
    INCRBY key increment //key存储的数字值加increment
    DECRBY key decrement //key存储的数字值加decrement

  • 运用场景

    • 单值缓存
    • 对象缓存
      1)SET user:1 value(json字符串)
      2)MSET user:1:name lw user:1:balance 10000 user:1:age 26
      MGET user:1:name user:1:balance user:1:age
    • 分布式锁核心
      SETNX pro:1001 true //返回1代表获取锁成功
      SETNX pro:1001 true //返回0代表获取锁失败
      。。。执行业务操作
      DEL pro:1001 //释放锁
      SET pro:1001 true ex 5 nx //设置过期时间防止意外死锁

2.Hash结构

  • 常用操作
    HSET key field value //存储一个哈希表key的键值
    HSETNX key field value //存储一个不村在哈希表key的键值
    HMSET key field value [field value …] //给一个key存储多个键值对
    HGET key field //获取key值对应的field值
    HGET key field [field …] //获取key值对应的多个field值
    HDEL key field [field …] //删除key中对应的field键值
    HLEN key //返回key中对应的field数量
    HGETALL key //返回key中所以的键值
    HINCRBY key field increment //给key中field对应的值加上increment
  • 运用场景
    • 对象缓存
    • 购物车
      1)添加购物车 hset cart:1001 10088 1
      2) 增加数量 hincrby cart:1001 10088 1
      3) 商品种类数 hlen cart:1001
      4) 删除商品 hdel cart:1001 10088
      5) 获取购物车中所以商品 hgetall cart:1001

3.List结构

  • 常用操作
    LPUSH key value [value …] //将一个或多个值插入到key列表的表头(最左侧)
    RPUSH key value [value …] //将一个或多个值插入到key列表的表尾(最右侧)
    LPOP key //移除并返回key列表的头元素
    RPOP key //移除并返回key列表的尾元素
    BLPOP key [key …] timeout //从key列表表头弹出一个元素,若列表中没有元素,则等待timeout秒,如果timeout=0,就一直阻塞等待
    BRPOP key [key …] timeout //从key列表表尾弹出一个元素,若列表中没有元素,则等待timeout秒,如果timeout=0,就一直阻塞等待
  • 运用场景
    • 常用数据结构
      Stack(栈)= LPUSH + LPOP (FILO)
      Queue(队列) = LPUSH + RPOP
      Blocking Queue(阻塞队列) = LPUSH + BRPOP
    • 微博和微信公众号消息流

4.Set结构

  • 常用操作
    SADD key member [member …] //往集合key中存入元素,
    SREM key member [member …] //从集合key中删除元素
    SMEMBERS key //获取集合key中的所有元素
    SISMEMBER key member //判断member元素是否存在集合key中
    SRANDMEMBER key [count] //从集合中选出count个元素,元素不从key中删除
    SPOP key [count] //从集合中选出count个元素,元素要从key中删除
  • set运算操作
    SINTER key [key …] //交集运算
    SINTERSTORE destination key [key …] //交集运算结果存入destination中
    SUNION key [key …] //并集运算
    SUNIONSTORE destination key [key …] //并集运算结果存入destination中
    SDIFF key [key …] //差集运算
    SDIFFSTORE destination key [key …] //差集运算结果存入destination中
    (对差集运算的理解:以第一个key集合为准,减去后面的所有集合剩下的元素)
  • 运用场景
    • 抽奖小程序
      1)点击抽奖加入集合 sadd key [userId …]
      2) 查看所有参与抽奖的用户 smembers key
      3)抽取count个中奖者 srandmember key [count] / spop key [count]
    • 点赞、收藏
      1)点赞 sadd message:1001 userId
      2) 取消点赞 srem message:1001 userId
      3) 检查用户是否点过赞 sismember message:1001 userId
      4)获取点赞的用户列表 smembers message:1001
      5)获取点赞的用户数 scard message:1001
    • 通过集合运算实现微博关注模型

5.ZSet有序集合结构

  • 常用操作
    ZADD key score member [[score member] …] //往集合key中存入带分值score的元素
    ZREM key member [member …] //从集合key中删除元素
    ZSCORE key member //获取集合key中的member元素的分值
    ZINCRBY key increment member //往member元素的分值上加increment
    ZCARD key //返回集合中的元素个数
    ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素(WITHSCORES 是否带分值返回)
    ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素(WITHSCORES 是否带分值返回)
  • set运算操作
    ZUNIONSTORE destkey numkeys key [key …] //并集计算
    ZINTERSTORE destkey numkeys key [key …] //交集计算
  • 运用场景
    • 排行榜
      1)点击新闻 ZINCRBY hotNews:20200620 1 newsId
      2) 展示当日排行前十 ZREVRANGE hotNews:20200620 0 10 WITHSCORES
      3)七日搜索榜单计算 ZUNIONSTORE hotNews:20200620-20200627 7
      hotNews:20200620 hotNews:20200621… hotNews:20200627
      4)展示七日排行前十
      ZREVRANGE hotNews:20200620-20200627 0 10 WITHSCORES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值