Redis 的五种数据类型
Redis 有五种数据类型: String、hash、list、set、sortedSet
一、String类型
这是最基本的类型,就是普通的 set 和 get, 可以做简单的 kv缓存
常用的方法
- 【set a avalue】
- 【setex a 100 avalue】 设置a的时候加入了过期时间
- 【psetex a 100 avalue】 单位比 setex 要小
- 【getrange world 0 2】 拿 world键对应的值的 0 - 2的元素
- 【mset a avalue b bvalue c cvalue】 可以同时设置多个键值对
- 【setnx a anewavalue】 当且只有 setnx的 key 不存在的时候,才会设置成功
- 【strlen world】 获取键对应的值的长度
- 【append a str】 在 a 键对应的值上追加 str
二、 hash
这个是类似map的一种结构,一般可以将结构化的数据,比如一个对象(前提是这个对象没有嵌套其他的对象)给缓存到 redis里,然后每次读写缓存的时候,可以只操作 hash 里面的某个字段。
key=150
value={
“id”: 150,
“name”: “zhangsan”,
“age”: 20
}
hash 类的数据结构,主要是用来存放一些对象,把一些简单的对象给缓存起来,后续操作的时候,你可以直接仅仅修改这个对象中某个字段的值
常用的方法
- 【hset map name fj】 map 是该hash对象的名字
- 【hget map name】 获取该map中的name值
- 【hgetall map】 拿 map 对象中所有键值
- 【hkeys map】 拿 map 对象的所有键
- 【hvals map】 拿 map 对象的所有值
- 【hmget map name age】 拿 map 对象中键 name 与 age 对应的值
三、list对象
有序列表,这个是可以有很多用处的。
微博中的某个大V粉丝,就可以以 list 的格式存放在redis里缓存
key = 某大V
value = {zhangsan,lisi,wangwu}
使用场景:
- 比如可以通过list 村粗一些列表型数据结构,类似粉丝列表、文章的评论列表之类的。
- 比如可以通过
lrange
命令,就是从某个元素开始读取多少个元素,可以基于 list 实现分页查询,基于 redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高。
常用的方法
- 【lpush list 1 2 3 4 5 6 7 8 9 10】 list 是该对象的名字
- 【llen list】 返回该对象list的长度
- 【lrange list 0 2】 返回的是 10 9 8 ,说明
lpush
操作是将新元素放入头部。 - 【lset list 0 100】 将0元素变为100
- 【lindex list 5】 获取第五个元素
- 【lpop list】 移除列表的第一个元素
- 【rpop list】 移除列表的最后一个元素
四、set(无需集合,自动去重)
直接基于 set 将系统里需要去重复的数据扔进去,自动就可以去除重复了。如果你需要对一些数据进行快速的全局去重,你可以使用基于 JVM 内存里的 HashSet 进行去重,但是如果你的某个系统部署在多台机器上呢?
如果你的系统部署在多个机器上,你就需要基于 redis 进行全局的set 去重。
可以基于 set 进行交集、并集、差集的操作,交集操作就可以将两个大V的粉丝列表做一个交集,查看两个人的共同好友。
常用的方法
- 【sadd set1 a b c d】 set1 是该对象的名字
- 【scard set1】 返回 set1 中的元素个数
- 【smemebers set1】 获取set1中的全部元素。
- 【sdiff set1 set2】 获取 set1 和 set2 的差集
- 【sinter set1 set2】 获取set1 set2 的 交集
- 【sunion set1 set2】 获取set1 set2 的 并集
- 【sismember set1 a】 判断 a 是否是 set1 中的元素
- 【srem set1 a b】 将元素 a 和 b 从 set1 中移除
五、 sortedset
排序的 set,去重但是可以排序,写进去的时候给个分数,自动根据分数排序。
如:你想要根据时间对数据进行排序,那么就可以写入进去的视乎用某个时间作为分数,人家自动给你按照时间排序了。
排行榜:将每个用户以及其对应的分数写入进去,zadd board score username
,接着zrevrange board 0 99
,就可以获取排名前100的用户;zrank board username
,可以看到用户在排行榜里的排名。
常用的方法
- 【zadd sortedset1 100 a 200 b 300 c】 sortedset1 是该对象的名字
- 【zcard sortedset1 】 获取 sortedset1 中元素的个数
- 【zcount sortedset1 0 220】 返回 sortedset1 对象中 0-220 分的元素个数。
- 【zrange sortedset1 0 100】 将 sortedset1 对象中前 100 的元素列举出来
- 【zrange sortedset1 0 100 withscores】 将 sortedset1 对象中前 100 的元素列举出来,带分数