Appearance
Redis 数据类型与使用场景
1. string
这是最基本的类型了,就是普通的 set 和 get,做简单的 kv 缓存。
2. hash
这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 Redis 里,然后每次读写缓存的时候,可以就操作 hash 里的某个字段。
Text
key=150
value={
“id”: 150,
“name”: “zhangsan”,
“age”: 20
}1
2
3
4
5
6
7
2
3
4
5
6
7
hash 类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值
Text
value={
“id”: 150,
“name”: “zhangsan”,
“age”: 21
}1
2
3
4
5
2
3
4
5
3. list
有序列表,这个是可以做很多不同操作的。
比如:微博,某个大 v 的粉丝,就可以以 list 的格式放在 Redis 里去缓存。
Text
key=某大 v
value=[zhangsan, lisi, wangwu]1
2
3
2
3
- 列表:可以通过 list 存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西。
- 分页:可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,这个很棒的一个功能,基于 Redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走。
- 队列:可以搞个简单的消息队列,从 list 头怼进去,从 list 尾巴那里弄出来。
4. set
无序集合,自动去重。
直接基于 set 将系统里需要去重的数据扔进去,自动就给去重了,如果你需要对一些数据进行快速的全局去重,你当然也可以基于 jvm 内存里的 HashSet 进行去重,但是如果你的某个系统部署在多台机器上呢?
可以基于 set 玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看俩人的共同好友是谁?
5. sorted set
排序的 set,去重但是可以排序,写进去的时候给一个分数,自动根据分数排序,这个可以玩儿很多的花样,最大的特点是有个分数可以自定义排序规则。
比如说你要是想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了。
排行榜:将每个用户以及其对应的什么分数写入进去 zadd board score username,接着 zrevrange board 0 99,就可以获取排名前 100 的用户;zrank board username,可以看到用户在排行榜里的排名
Text
zadd board 85 zhangsan
zadd board 72 wangwu
zadd board 96 lisi
zadd board 62 zhaoliu
96 lisi
85 zhangsan
72 wangwu
62 zhaoliu
zrevrange board 0 3
获取排名前 3 的用户
96 lisi
85 zhangsan
72 wangwu
zrank board zhaoliu
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21