-
String
普通的get和set,适用于简单的KV缓存
-
hash
常用命令hget,hset
key=150
1 2 3 4 5
value={ 'id': 150, 'name': 'zhangsan', 'age': 20 }
hash类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来, 后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值
1 2 3 4 5
value={ 'id': 150, 'name': 'zhangsan', 'age': 21 }
-
list
有序列表,常用命令lpush,rpush,lindex,lpop
适用场景如微博,某个大v的粉丝,就可以以list的格式放在redis里去缓存, key=某大v,value=[zhangsan, lisi, wangwu]。
比如可以通过list存储一些列表型的数据结构,类似粉丝列表了、文章的评论列表了之类的东西
比如可以通过lrange命令,就是从某个元素开始读取多少个元素,可以基于list实现分页查询, 这个很棒的一个功能,基于redis实现简单的高性能分页, 可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走.
比如可以搞个简单的消息队列,从list头怼进去,从list尾巴那里弄出来。
-
set
无序集合,自动去重。常用命令sadd,sdiff,sinter.
直接基于set将系统里需要去重的数据扔进去,自动就给去重了, 如果你需要对一些数据进行快速的全局去重,你当然也可以基于jvm内存里的HashSet进行去重, 但是如果你的某个系统部署在多台机器上呢?得基于redis进行全局的set去重
可以基于set做交集、并集、差集的操作,比如交集吧, 可以把两个人的粉丝列表整一个交集,看看俩人的共同好友。
把两个大v的粉丝都放在两个set中,对两个set做交集。
-
sorted set
排序的set,去重但是可以排序,写进去的时候给一个分数,自动根据分数排序, 最大的特点是有个分数可以自定义排序规则。常用命令zadd,zrank,zrevrange。
比如说你要是想根据时间对数据排序,那么可以写入进去的时候用某个时间作为分数,人家自动给你按照时间排序了。
排行榜:将每个用户以及其对应的什么分数写入进去,
zadd board score username
接着zrevrange board 0 99,就可以获取排名前100的用户;
zrank board username,可以看到用户在排行榜里的排名