版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
上一篇文章学习了SET
和GET
命令,忽然发现一点问题,上来就直接学命令有点懵,对Redis的构成没有一个完整的认识,虽然可以使用SET设置变量的值,但是类比其他语言时不知道设置的是什么类型,比如C++中的int整数类型,Python中的list列表类型,接下来看看Redis这个数据库支持哪些常见类型。
It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.
以上引用内容是官方说明中的一句话,其中最常使用的类型是strings, hashes, lists, sets, sorted sets这5种,也就是我们常提到的:字符串、散列表、列表、集合和有序集合,其他的结构对于初学者来说暂时还用不到,等学完基础的再慢慢深入学习。
关于这些类型的详细介绍可以参考官方文档中的数据类型介绍,接下来我们也简单了解一下,之后就按照常见数据结构类型来逐步学习对应的操作命令,在下面介绍的过程中会出现一些没有见过的命令,只要简单了解一下就好,后面还会慢慢学习的,先不要着急。
strings 字符串
字符串类型是最简单的类型,在redis中字符串类型不仅可以存储字节串,同时也可以存储整数和浮点数,并且可以直接做增减运算,可以作为系统的实时计数器,我们之前使用的SET和GET命令就是操作的这种类型。
简单的字符串设置和读取
127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> GET name
"albert"
设置整数然后自增
127.0.0.1:6379> SET age 18
OK
127.0.0.1:6379> TYPE age
string
127.0.0.1:6379> INCR age
(integer) 19
127.0.0.1:6379> GET age
"19"
hashes 散列表
这个是类似 map 的一种结构,可以用来存储对象和 id 的对应关系,比如可以用 cookie id 作为key,对应存储用户信息,并设置缓存过期时间,可以优化玩家登录体验。
将用户多条信息存储在user这个散列表中id为101对应的值中:
127.0.0.1:6379> hmet user:101 username albert age 18
(error) ERR unknown command 'hmet'
127.0.0.1:6379> HMSET user:101 username albert age 18
OK
127.0.0.1:6379> HGET user:101 username
"albert"
127.0.0.1:6379> HGETALL user:101
1) "username"
2) "albert"
3) "age"
4) "18"
lists 列表
这个list就是一组数据的列表,可以用来实现消息队的功能。结合lrange命令做分页功能,性能极佳。
在一个list类型的列表两端分别插入值,然后显示整个列表内容
127.0.0.1:6379> RPUSH mylist B
(integer) 1
127.0.0.1:6379> RPUSH mylist C
(integer) 2
127.0.0.1:6379> LPUSH mylist A
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "A"
2) "B"
3) "C"
sets 集合
这个就是我们数学上定义的集合,其中没有重复的元素,可以做交集、并集、差集的操作,有了这些操作就可以做很多功能,比如找到俩个人的共同好友,只要把连个人的好友集合做一个并集操作就可以了,非常方便。
在两个set中分别插入数据,然后取交集
127.0.0.1:6379> SADD setA 1 2 3
(integer) 3
127.0.0.1:6379> SMEMBERS setA
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> SADD setB 2 5 6
(integer) 3
127.0.0.1:6379> SMEMBERS setB
1) "2"
2) "5"
3) "6"
127.0.0.1:6379> SINTER setA setB
1) "2"
127.0.0.1:6379>
sorted sets 有序集合
sorted sets 相比 sets 多了一个权重参数score,集合中的元素插入时就能够按score进行排列,可以做排行榜功能,或者带权重的对列。
输入每个人的成绩,分别按照从低到高和从高到低排序:
127.0.0.1:6379> ZADD grade 99 albert
(integer) 1
127.0.0.1:6379> ZADD grade 97 bella
(integer) 1
127.0.0.1:6379> ZADD grade 80 tom
(integer) 1
127.0.0.1:6379> ZADD grade 85 wang
(integer) 1
127.0.0.1:6379> ZRANGE grade 0 -1
1) "tom"
2) "wang"
3) "bella"
4) "albert"
127.0.0.1:6379> ZREVRANGE grade 0 -1
1) "albert"
2) "bella"
3) "wang"
4) "tom"
>2019-11-22 16:23:11
总结
strings
,hashes
,lists
,sets
,sorted sets
是Redis中常见的数据结构。- 后面在学习新命令的时候会指明操作的是哪一种数据结构,有些命令不针对结构,这一点也要注意。