String
这是最基本的类型了,就是普通的 set 和 get,做简单的 kv 缓存
hash
这是类似 map 的之中结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌入其他的对象)给缓存在 redis 里,然后每次读写缓存的时候,可以就操作 hash 里的某个字段。
key=42
value=
{
"id":42
“name":yaya
"age":20
}
hash 类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以仅仅修改这个对象中的某个 字段 的值
key=42
value=
{
"id":42
“name":yaya
"age":21
}
list
有序列表,这个是可以玩很多花样的
微博,某个大v的粉丝,就可以以 list 的格式放在 redis 里去缓存
key=某大v
value=【静静,琪琪,雅雅】
比如通过 list 存储一些列表型的数据结构,类似粉丝列表、文章的评论列表了之类的东西
比如可以通过 lrange 命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,这个很棒的一个功能,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走。
比如可以搞一个简单的消息队列,从 list 头怼进去,从 list 尾巴哪里弄出来;
set
无序集合,自动去重;
直接基于 set 将系统里需要去重的数据丢进去,自动就给去重了。如果你需要对一些数据进行快速的全局去重,你当然也可以基于 jvm 内存里的 hashSet 进行去重,但是如果你的某个系统部署在多台机器上呢?
得基于 redis 进行全局得 set 去重;
可以基于 set 玩儿交集、并集、差集的操作,比如交集吧,可以把两个人的粉丝列表整一个交集,看看两个的共同好友是谁。对吧;
把两个大 v 的粉丝都放在两个 set 中,对两个 set 做交集;如果 set 做交集就百度;api调用了
sorted set zset
排序的 set 去重但是可以排序,写进去的时候一个分数,自动根据分数排序,这个可以玩很多花样,最大的特点是有个分数可以自定义排序规则
比如说你要是根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了
排行榜:
zadd board 88 jingjing
zadd board 89 qiqi
zadd board 90 yaya
zadd board 60 htion
自动根据 分数 排序
90 yaya
89 qiqi
88 jingjing
60 htion
接下来 zrevange board 0 99,就可以获取排名前 100 的用户,zrank board username,就可以看到用户在排行榜里的排名。
zrevrange board 0 3
获取排名前 3 的用户
90 yaya
89 qiqi
88 jingjing
现在 qiqi 的排序就是在第二
zrank board qiqi
2