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 bingohset person age 20hset person id 1hget 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 1lpush mylist 2lpush mylist 3 4 5# 1rpop mylist复制代码
Sets
Sets 是无序汇合,主动去重。
间接基于 set 将零碎里须要去重的数据扔进去,主动就给去重了,如果你须要对一些数据进行疾速的全局去重,你当然也能够基于 jvm 内存里的 HashSet 进行去重,然而如果你的某个零碎部署在多台机器上呢?得基于 Redis 进行全局的 set 去重。
能够基于 set 玩儿交加、并集、差集的操作,比方交加吧,能够把两个人的粉丝列表整一个交加,看看俩人的独特好友是谁?对吧。
把两个大 V 的粉丝都放在两个 set 中,对两个 set 做交加。
#-------操作一个set-------# 增加元素sadd mySet 1# 查看全副元素smembers mySet# 判断是否蕴含某个值sismember mySet 3# 删除某个/些元素srem mySet 1srem mySet 2 4# 查看元素个数scard mySet# 随机删除一个元素spop mySet#-------操作多个set-------# 将一个set的元素挪动到另外一个setsmove yourSet mySet 2# 求两set的交加sinter yourSet mySet# 求两set的并集sunion yourSet mySet# 求在yourSet中而不在mySet中的元素sdiff yourSet mySet复制代码
Sorted Sets
Sorted Sets 是排序的 set,去重但能够排序,写进去的时候给一个分数,主动依据分数排序。
zadd board 85 zhangsanzadd board 72 lisizadd board 96 wangwuzadd board 63 zhaoliu# 获取排名前三的用户(默认是升序,所以须要 rev 改为降序)zrevrange board 0 3# 获取某用户的排名zrank board zhaoliu