redis学习笔记(一) - redis的数据类型

172 阅读5分钟

redis九大数据类型

  • String(字符类型)

  • Hash(散列类型)

  • List(列表类型)

  • Set(集合类型)

  • SortedSet(有序集合类型,简称zset)

  • Bitmap(位图)

  • HyperLogLog(统计)

  • GEO(地理、地图)

  • Stream(流、队列)

    Stream是redis5.0版本新增的数据结构。

    主要用于消息队列,基本不用,市面上有功能更完备的产品(rabbitMQ,rocketMQ等)

备注说明

命令不区分大小写,而key是区分大小写的。

Help @类型名词 用于查询类型下的命令

String

最常用:

set key value

get key

同时设置/获取多个键值:

mset key value [key value…]

mget key [key…]

数值增减

递增数字:incr key

增加指定的整数:incrby key increment

递减数值:decr key

减少指定的整数:decrby key decrement

获取字符串长度

strlen key

分布式锁

setnx key value

set key value [EX seconds] [PX milliseconds] [NX|XX]

应用场景

比如抖音无限点赞某个视频或者商品,点一下加一次。

HASH

Map<String, Map<Object, Object>>

一次设置一个字段值

HSET key field value

一次获取一个字段值

HGET key field

一次设置多个字段值

HSET key field value [field value…]

一次获取多个字段值

HGET key field [field…]

获取所有字段值

HGETALL key

获取某个key内的全部数量

Hlen key

删除一个key

Hdel key

应用场景

购物车

新增商品 → hset shopcar:uid1024 334488 1
新增商品 → hset shopcar:uid1024 334477 1
增加商品数量 → hincrby shopcar:uid1024 334477 1
商品总数 → hlen shopcar:uid1024
全部选择 → hgetall shopcar:uid1024

LIST

简单说明

一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。

向列表左边添加元素

LPUSH key value [value]

向列表右边添加元素

RPUSH key value [value]

查看列表

LRANGE key start stop

获取列表中元素个数

LLEN key

应用场景

  1. 微信公众号订阅的消息
  • 用户1 和用户2 分别发布了文章 123和124

  • 我关注了他们两个,只要他们发布新文章,就会安装进我的List

    • Lpush likearticle:myid 123 124
  • 查看我订阅的所有文章,类似分页,下面0~10就是一次显示10条

    Lrange likearticle:myid 0 9

  1. 商品评论列表

    需求1: 用户针对某一商品发布评论,一个商品会被不同的用户进行评论,保存商品评论时,要按时间顺序排序。

    需求2:用户在前端页面查询该商品的评论,需要按照时间顺序降序排序。

    Case:

    使用list存储商品评论信息,key是该商品的id,value是商品评论信息商品编号为1001的商品评论key【items:comment:1001】
    lpush items:comment:1001 {"id":1001,"name":"huawei","date":1600484283054,"content":"las"}

Set(值不重复)

添加元素

Sadd key member [member…]

删除元素

Srem key member [member…]

遍历集合中的所有元素

SMEMBERS key

判断元素是否在集合中

SISMEMBER key member

获取集合中的元素总数

SCARD key

从集合中随机弹出一个元素,元素不删除

SRANDMEMBER key [数字]

从集合中随机太初一个元素,出一个删一个

SPOP key [数字]

集合运算

A:ABC12

B:123AX

集合差集运算 A-B

属于A但不属于B的元素构成的集合

SDIFF key [KEY…]

BC

集合交集运算A∩B

属于A同时也属于B的共同拥有的元素构成的集合

SINTER key [key…]

12a

集合并集运算A ∪ B

属于A或者属于B的元素合并后的集合

SUNION key [key…]

123abcx

应用场景

抽奖小程序

  1. 用户ID,立即参与抽奖,sadd key userId

  2. 显示已经有多少人参与 SCARD key

  3. 抽奖(从set中任意选取2个中奖人)

    SRANDMEMBER key 2 元素不删除

    SPOP key 2 元素会删除

点赞

  1. 新增点赞 sadd pub:msgid 点赞用户ID1 点赞用户ID2

  2. 取消点赞 srem pub:msgid 点赞用户ID

  3. 展现所有点赞过的用户 smembers pub:msgid

  4. 点赞用户数统计,就是常见的点赞红色数字 scard pub:msgid

  5. 判断某个朋友是否点赞过 SISMEMBER pub:msgid 用户ID

好友关注社交关系

  1. 共同关注的人 SINTER

  2. 我关注的人也关注了他 SDIFF

可能认识的人

Zset(有序不重复)

添加元素

Zadd key score member [score member]

按照元素分数从小到大的顺序

ZRANGE key start stop [WITHSCORES]

获取元素的分数

ZSCORE key member

删除元素

ZREM key member [member…]

获取指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

增加某个元素的分数

ZINCRBY key increment member

获取集合中元素的数量

ZCARD key

获取指定分数范围内的元素格式

Zcount key min max

按照排名范围删除元素

ZREMRANGEBYRANK key start stop

获取元素的排名

从大到小 ZRANK key member

从小到大 ZREVRANK key member

应用场景

根据商品销售对商品进行排序显示

思路:定义商品销售排行榜 key为goods:sellsort,分数为商品销售数量

  1. 商品编号1001的销量是9,1002是10 zadd goods:sellsort 9 1001 15 1002

  2. 有一个客户又买了2件商品1001,1001销量加2 zincrby goods:sellsort 2 1001

  3. 求商品销量前10名 zrange goods:sellsort 0 10 withscores

热搜

  1. 点击视频 ZINCRBY hotvcr:20240325 1 vcrid1

  2. ZINCRBY hotvcr:20240325 15 vcrid1

  3. 展示当日排行前10条 ZREVRANGE hotvcr:20240325 0 9 withscores