Redis 数据类型及应用场景
Redis 次要有以下几种数据类型:
- Strings
- Hashes
- Lists
- Sets
- Sorted Sets
Redis 除了这 5 种数据类型之外,还有 Bitmaps、HyperLogLogs、Streams 等。
Strings
这是最简略的类型,就是一般的 set 和 get,做简略的 KV 缓存。
set college szu
复制代码
Hashes
这个是相似 map 的一种构造,这个个别就是能够将结构化的数据,比方一个对象(前提是 这个对象没嵌套其余的对象 )给缓存在 Redis 里,而后每次读写缓存的时候,能够就操作 hash 里的 某个字段。
hset person name bingo
hset person age 20
hset person id 1
hget person name
(person = {
"name": "bingo",
"age": 20,
"id": 1
})
复制代码
Lists
Lists 是有序列表,这个能够玩儿出很多花色。
比方能够通过 list 存储一些列表型的数据结构,相似粉丝列表、文章的评论列表之类的货色。
比方能够通过 lrange 命令,读取某个闭区间内的元素,能够基于 list 实现分页查问,这个是很棒的一个性能,基于 Redis 实现简略的高性能分页,能够做相似微博那种下拉一直分页的货色,性能高,就一页一页走。
# 0 开始地位,- 1 完结地位,完结地位为 - 1 时,示意列表的最初一个地位,即查看所有。lrange mylist 0 -1
复制代码
比方能够搞个简略的音讯队列,从 list 头怼进去,从 list 尾巴那里弄出来。
lpush mylist 1
lpush mylist 2
lpush mylist 3 4 5
# 1
rpop mylist
复制代码
Sets
Sets 是无序汇合,主动去重。
间接基于 set 将零碎里须要去重的数据扔进去,主动就给去重了,如果你须要对一些数据进行疾速的全局去重,你当然也能够基于 jvm 内存里的 HashSet 进行去重,然而如果你的某个零碎部署在多台机器上呢?得基于 Redis 进行全局的 set 去重。
能够基于 set 玩儿交加、并集、差集的操作,比方交加吧,能够把两个人的粉丝列表整一个交加,看看俩人的独特好友是谁?对吧。
把两个大 V 的粉丝都放在两个 set 中,对两个 set 做交加。
#------- 操作一个 set-------
# 增加元素
sadd mySet 1
# 查看全副元素
smembers mySet
# 判断是否蕴含某个值
sismember mySet 3
# 删除某个 / 些元素
srem mySet 1
srem mySet 2 4
# 查看元素个数
scard mySet
# 随机删除一个元素
spop mySet
#------- 操作多个 set-------
# 将一个 set 的元素挪动到另外一个 set
smove yourSet mySet 2
# 求两 set 的交加
sinter yourSet mySet
# 求两 set 的并集
sunion yourSet mySet
# 求在 yourSet 中而不在 mySet 中的元素
sdiff yourSet mySet
复制代码
Sorted Sets
Sorted Sets 是排序的 set,去重但能够排序,写进去的时候给一个分数,主动依据分数排序。
zadd board 85 zhangsan
zadd board 72 lisi
zadd board 96 wangwu
zadd board 63 zhaoliu
# 获取排名前三的用户(默认是升序,所以须要 rev 改为降序)zrevrange board 0 3
# 获取某用户的排名
zrank board zhaoliu
各个数据类型利用场景: