Redis数据结构

1.数据结构及应用场景

1. String
  • SET key value :存入字符串键值对
  • MSET key value [key value …] :批量存储字符串键值对
  • SETNX key value :只在键 key 不存在的情况下,将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。
  • GET key :获取一个字符串键值
  • MGET key [key …] :批量获取字符串键值
  • DEL key [key …] :删除一个键
  • EXPIRE key seconds :设置一个键的过期时间(秒)
1.1 常用操作
  • INCR key :将key中储存的数字值加1
  • DECR key :将key中储存的数字值减1
  • INCRBY key increment :将key所储存的值加上increment
  • DECRBY key decrement :将key所储存的值减去decrement
1.2 分布式锁
  • SETNX Key true :返回 1 代表获取锁成功
  • SETNX Key true :返回 0 代表获取锁失败
  • DEL Key :执行完业务释放锁
  • SET Key true ex 10 nx :设置时间,防止程序意外终止导致死锁
1.3 计数器
  • INCR Key:key加一
  • GET Key:获取key的计数的数量
1.4 spring session + redis实现session共享
1.5 分布式系统全局序列号
  • INCRBY ID 500 : 批量成序列号提升性能
2.Hash
  • HSET key field value : 存储一个哈希表key的键值
  • HSETNX key field value:当且仅当域 field 尚未存在于哈希表的情况下, 将它的值设置为 value 。如果给定域已经存在于哈希表当中, 那么命令将放弃执行设置操作。如果哈希表 hash 不存在, 那么一个新的哈希表将被创建并执行 HSETNX 命令
  • HMSET key field value [field value …] :在一个哈希表key中存储多个键值对
  • HGET key field :获取哈希表key对应的field键值
  • HMGET 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
3.List
  • LPUSH key value [value …]:将一个或多个值value插入到key列表的表头(最左边)
  • RPUSH key value [value …]:将一个或多个值value插入到key列表的表尾(最右边)
  • LPOP key:移除并返回key列表的头元素
  • RPOP key:移除并返回key列表的尾元素
  • LRANGE key start stop :返回列表key中指定区间内的元素,区间以偏移量start和stop指定
  • BLPOP key [key …] timeout :从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待
  • BRPOP key [key …] timeout :从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如timeout=0,一直阻塞等待
3.1 可以实现的数据结构
  • Stack(栈) = LPUSH + LPOP
  • Queue(队列)= LPUSH + RPOP
  • Blocking MQ(阻塞队列)= LPUSH + BRPOP
3.2 适用场景

LRANGE key start stop 实现微博和微信公号消息流

例:小明关注大V,大V发消息后,该消息ID为001

以key为msgID:001,value为001消息内容进行操作
lpush msgID:小明 001

小明查看最新消息:
lrange msgID:小明 0 5

4.Set
  • SADD key member [member …]:往集合key中存入元素,元素存在则忽略,若key不存在则新建
  • SREM key member [member …] :从集合key中删除元素
  • SMEMBERS key :获取集合key中所有元素
  • SCARD key :获取集合key的元素个数
  • SISMEMBER key member:判断member元素是否存在于集合key中
  • SRANDMEMBER key [count]:从集合key中选出count个元素,元素不从key中删除
  • SPOP key [count] :从集合key中选出count个元素,元素从key中删除
4.1 常用操作
  • SINTER key [key …] :交集运算
  • SINTERSTORE destination key [key …]:将交集结果存入新集合destination中
  • SUNION key [key …] :并集运算
  • SUNIONSTORE destination key [key …] :将并集结果存入新集合destination中
  • SDIFF key [key …] :差集运算
  • SDIFFSTORE destination key [key …] :将差集结果存入新集合destination中
4.2 应用场景

① 抽奖
参与抽奖:SADD key {userlD}
查看参与抽奖所有用户:SMEMBERS key
抽取count名中奖者:SRANDMEMBER key [count] / SPOP key [count]

② 点赞,收藏功能的实现
点赞:SADD 消息ID {用户ID}
取消点赞:SREM 消息ID {用户ID}
检查用户是否点过赞:SISMEMBER 消息ID {用户ID}
获取点赞的用户列表:SMEMBERS 消息ID
获取点赞用户数:SCARD 消息ID

③关注模型
小明关注的人:MingSet === {A,B}
小红关注的人:HongSet === {A,B,C,D}
小白关注的人:BaiSet === {A,C,E,F,G}
小明和小红关注的人:SINTER MingSet HongSet === {A,B}
小明可能认识的人:SDIFF HongSet MingSet === {C,D}

5. ZSet
  • ZADD key score member [[score member]…] :往有序集合key中加入带分值元素
  • ZREM key member [member …] :从有序集合key中删除元素
  • ZSCORE key member :返回有序集合key中元素member的分值
  • ZINCRBY key increment member:为有序集合key中元素member的分值加上increment
  • ZCARD key :返回有序集合key中元素个数
  • ZRANGE key start stop [WITHSCORES] : 正序获取有序集合key从start下标到stop下标的元素
  • ZREVRANGE key start stop [WITHSCORES] :倒序获取有序集合key从start下标到stop下标的元素
5.1 常用操作
  • ZUNIONSTORE destkey numkeys key [key …] :并集计算
  • ZINTERSTORE destkey numkeys key [key …] :交集计算
5.2 适用场景

点击新闻:ZINCRBY NewId 1 News
展示当日排行前十:ZREVRANGE NewId 0 9 WITHSCORES
七日搜索榜单计算:ZUNIONSTORE NewId20190813-20190819 7 NewId20190813 NewId:20190814… NewId20190819
展示七日排行前十:ZREVRANGE NewId20190813-20190819 0 9 WITHSCORES

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值