Redis五种数据结构

1、String&&bitmap的api操作

1.1 String的常用api

Stringredis最常用的结构,进入redis客户端输入 help @string 可以查看api

序号

命令及描述

1

SET key value

设置指定 key 的值

2

GET key

获取指定 key 的值。

3

GETRANGE key start end

返回 key 中字符串值的子字符

4

GETSET key value

将给定 key 的值设为 value ,并返回 key 的旧值(old value)。

5

GETBIT key offset

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

6

MGET key1 [key2..]

获取所有(一个或多个)给定 key 的值。

7

SETBIT key offset value

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

8

SETEX key seconds value

将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位)。

9

SETNX key value

只有在 key 不存在时设置 key 的值。

10

SETRANGE key offset value

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始。

11

STRLEN key

返回 key 所储存的字符串值的长度。

12

MSET key value [key value ...]

同时设置一个或多个 key-value 对。

13

MSETNX key value [key value ...]

同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。

14

PSETEX key milliseconds value

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位。

15

INCR key

将 key 中储存的数字值增一。

16

INCRBY key increment

将 key 所储存的值加上给定的增量值(increment) 。

17

INCRBYFLOAT key increment

将 key 所储存的值加上给定的浮点增量值(increment) 。

18

DECR key

将 key 中储存的数字值减一。

19

DECRBY key decrement

key 所储存的值减去给定的减量值(decrement) 。

20

APPEND key value

如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

1.2 redis的bitmap

 

bitmap可以通过setbit设置某一位为1或者0

setbit key offset value

offset 代表二进制的位,如 setbit k1 7 1,就是将第7位设置为1。

如果 offset 大于一个字节的长度,则会开辟另一个字节。如 set k1 9 1--->0000 0000 0100 0000

1.2.1 bitmap的应用

1:有用户系统,统计用户在某段时间区间登录天数

setbit user:michael 1 1

setbit user:michael 7 1

setbit user:michael 364 1

STRLEN user:michael

BITCOUNT user:michael -1 -1 //统计最后一个字节有多少1

strlen user:michael 会输出总共占用多少个字节

BITCOUNT则会统计字节区间共有多少个1

 

2,电商618做活动:送礼物

大库备货多少礼物

假设京东有2亿用户

僵尸用户

冷热用户/忠诚用户

活跃用户统计!随机窗口

比如说 1号~3号  连续登录要     去重

日期作为key

setbit 20190101   1  1

setbit 20190102   1  1

setbit 20190102   7  1

bitop  or   destkey 20190101  20190102

BITCOUNT  destkey  0 -1 

2、list的常用api操作

可以通过 help @list 查看 api

序号

命令及描述

1

BLPOP key1 [key2 ] timeout

移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

2

BRPOP key1 [key2 ] timeout

移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

3

BRPOPLPUSH source destination timeout

从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

4

LINDEX key index

通过索引获取列表中的元素

5

LINSERT key BEFORE|AFTER pivot value

在列表的元素前或者后插入元素

6

LLEN key

获取列表长度

7

LPOP key

移出并获取列表的第一个元素

8

LPUSH key value1 [value2]

将一个或多个值插入到列表头部

9

LPUSHX key value

将一个或多个值插入到已存在的列表头部

10

LRANGE key start stop

获取列表指定范围内的元素

11

LREM key count value

移除列表元素

12

LSET key index value

通过索引设置列表元素的值

13

LTRIM key start stop

对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

14

RPOP key

移除并获取列表最后一个元素

15

RPOPLPUSH source destination

移除列表的最后一个元素,并将该元素添加到另一个列表并返回

16

RPUSH key value1 [value2]

在列表中添加一个或多个值

17

RPUSHX key value

为已存在的列表添加值

 

应用场景:微博和微信消息推送

我关注了A、B两个人,

A 发微博,消息ID为 1 <---> LPUSH message:myid 1

B 发微博,消息ID为 2 <---> LPUSH message:myid 2

查看最新消息 LRANGE message:myid 0 5

3、hash结构常用api

序号

命令及描述

1

HDEL key field2 [field2]

删除一个或多个哈希表字段

2

HEXISTS key field

查看哈希表 key 中,指定的字段是否存在。

3

HGET key field

获取存储在哈希表中指定字段的值/td>

4

HGETALL key

获取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment

为哈希表 key 中的指定字段的整数值加上增量 increment 。

6

HINCRBYFLOAT key field increment

为哈希表 key 中的指定字段的浮点数值加上增量 increment 。

7

HKEYS key

获取所有哈希表中的字段

8

HLEN key

获取哈希表中字段的数量

9

HMGET key field1 [field2]

获取所有给定字段的值

10

HMSET key field1 value1 [field2 value2 ]

同时将多个 field-value (域-值)对设置到哈希表 key 中。

11

HSET key field value

将哈希表 key 中的字段 field 的值设为 value 。

12

HSETNX key field value

只有在字段 field 不存在时,设置哈希表字段的值。

13

HVALS key

获取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

1 hash结构可以用来做对象缓存如下图:

2 用户关注

hash结构优点:

1 同类数据整合存储,方便统一管理

2 相比String操作消耗内存与CPU更少

3 比String更节省空间

缺点:

1 过期功能不能使用在field上,只能用于key

2 redis集群架构不适合大规模应用

4、set结构和常用api

序号

命令及描述

1

SADD key member1 [member2]

向集合添加一个或多个成员

2

SCARD key

获取集合的成员数

3

SDIFF key1 [key2]

返回给定所有集合的差集

4

SDIFFSTORE destination key1 [key2]

返回给定所有集合的差集并存储在 destination 中

5

SINTER key1 [key2]

返回给定所有集合的交集

6

SINTERSTORE destination key1 [key2]

返回给定所有集合的交集并存储在 destination 中

7

SISMEMBER key member

判断 member 元素是否是集合 key 的成员

8

SMEMBERS key

返回集合中的所有成员

9

SMOVE source destination member

将 member 元素从 source 集合移动到 destination 集合

10

SPOP key

移除并返回集合中的一个随机元素

11

SRANDMEMBER key [count]

返回集合中一个或多个随机数

12

SREM key member1 [member2]

移除集合中一个或多个成员

13

SUNION key1 [key2]

返回所有给定集合的并集

14

SUNIONSTORE destination key1 [key2]

所有给定集合的并集存储在 destination 集合中

15

SSCAN key cursor [MATCH pattern] [COUNT count]

迭代集合中的元素

set的应用场景

1 微信微博点赞、收藏、标签

点赞操作: SADD Rate:消息ID 用户ID

取消点赞: SREM Rate:消息ID 用户ID

检查用户是否点过赞: SISMEMBER Rate:消息ID 用户ID

获取点赞的用户列表: SMEMBERS Rate:消息ID

获取点赞用户数: SCARD Rate:消息ID

2 实现微博关注功能(用集合操作)

取交集: SINTER set1 set2 set3 ---> {b}

取并集: SUNION set1 set2 set3 ---> {a,b,c,d,f}

取差集: SDIFF set1 set2 set3 ---> {a} //结果是在集合set1中出现,但是没有在其他集合出现

A B的共同关注 SINTER seta setb

A 关注的人也关注了他(C) SISMEMBER B C SISMEMBER D C

A可能认识的人 SDIFF B A SDIFF C A

3 抽奖

加入抽奖集合:SADD key 用户ID

查看参与抽奖的所有用户: SMEMBERS key

随机抽奖:SRANDMEMBER key count //count代表抽多少人

5 zset结构和常用api

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

序号

命令及描述

1

ZADD key score1 member1 [score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的分数

2

ZCARD key

获取有序集合的成员数

3

ZCOUNT key min max

计算在有序集合中指定区间分数的成员数

4

ZINCRBY key increment member

有序集合中对指定成员的分数加上增量 increment

5

ZINTERSTORE destination numkeys key [key ...]

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

6

ZLEXCOUNT key min max

在有序集合中计算指定字典区间内成员数量

7

ZRANGE key start stop [WITHSCORES]

通过索引区间返回有序集合成指定区间内的成员

8

ZRANGEBYLEX key min max [LIMIT offset count]

通过字典区间返回有序集合的成员

9

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]

通过分数返回有序集合指定区间内的成员

10

ZRANK key member

返回有序集合中指定成员的索引

11

ZREM key member [member ...]

移除有序集合中的一个或多个成员

12

ZREMRANGEBYLEX key min max

移除有序集合中给定的字典区间的所有成员

13

ZREMRANGEBYRANK key start stop

移除有序集合中给定的排名区间的所有成员

14

ZREMRANGEBYSCORE key min max

移除有序集合中给定的分数区间的所有成员

15

ZREVRANGE key start stop [WITHSCORES]

返回有序集中指定区间内的成员,通过索引,分数从高到底

16

ZREVRANGEBYSCORE key max min [WITHSCORES]

返回有序集中指定分数区间内的成员,分数从高到低排序

17

ZREVRANK key member

返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

18

ZSCORE key member

返回有序集中,成员的分数值

19

ZUNIONSTORE destination numkeys key [key ...]

计算给定的一个或多个有序集的并集,并存储在新的 key 中

20

ZSCAN key cursor [MATCH pattern] [COUNT count]

迭代有序集合中的元素(包括元素成员和元素分值)

zset的应用场景

热搜排序展示

1 点击新闻

ZINCRBY hotnews:20210714 1 华莱士 //点击一次新闻,对应热度加一,热度就是分数

2 展示当日排行前十

ZREVRANGE hotnews:20210714 0 10 WITHSCORES

3 七日搜索榜单计算

ZUNION hotnews:20210714-20210720 7 hotnews:20210714 hotnews:20210715 ... hotnews:20210720

4 展示七日排行前十

ZREVRANGE hotnews:20210714-20210720 0 10 WITHSCORES

本文语雀连接:https://www.yuque.com/michael-qambz/igeais/nie56i

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值