开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
引言
我们在日常开发工作中,经常要使用到redis,大部分情况下我们基本上会使用到以下五种数据类型:
String、Hash、List、Set、Zset,下面我们来简单介绍一下这五种数据类型。如果没有安装redis的小伙伴可以参照上一篇文章docker-compose部署redis7。
String
String是redis中最基本的数据类型,一般使用以下命令创建:
set key value
示例:
redis> set name zouwei
OK
我们通过set命令给name赋值为zouwei;
查询创建好的String数据可以使用以下命令:
get key
示例:
redis> get name
zouwei
通过get命令把之前设置进去的name值取出来;
Hash
Hash数据类型和我们在java中是的键值对几乎一样,对应的命令如下:
set name key value
示例:
redis> hset zouwei age 20
1
redis> hset zouwei weight 60
1
redis> hset zouwei height 170
1
Hash对应的设置命令为hset,它给zouwei这个对象设置了多个属性,包括age、weight、height;
从redis中获取hash对象的命令如下:
hget name key
示例:
redis> hget zouwei weight
60
redis> hget zouwei height
170
redis> hget zouwei age
20
List
List相当于java中的栈或者对列,因为List既可以从头添加数据或移除数据,也可以从尾部添加数据或移除数据,相关命令如下:
lpush name value
rpush name value
示例如下:
redis> lpush queue first
1
redis> lpush queue second
2
redis> rpush queue third
3
redis> rpush queue four
4
lpush表示从左边把value放进去,rpush表示从右边把value放进去,最后queue为[second,first,third,four];
下面我们来看一下查询的命令:
redis> lrange queue 0 -1
0 second
1 first
2 third
3 four
确实和前面的顺序一致。另外在介绍一下推出命令:
lpop name
rpop name
示例:
redis> lpop queue
second
redis> rpop queue
four
从示例中,可以看出lpop就是从左边推出一个元素,rpop是从右边推出一个元素;
Set
Set相当于java中的Set集合,它可以起到去重的作用,也可以通过两个Set的对比找到并集、交集、差集;下面来看一下相关命令:
sadd name value
示例:
redis> sadd my_firends tom
1
redis> sadd my_firends jack
1
redis> sadd my_firends sherry
1
redis> sadd my_firends sherry
0
返回值0表示我们的命令没有产生影响,查看我们刚刚给my_firends设置的值:
redis> smembers my_firends
0 jack
1 sherry
2 tom
我们可以发现,Set不是有序的。下面我们来使用一下并集、交集、差集相关的命令:
查看交集:sinter name1 name2;
查看my_firends和your_firends的交集:
redis> sadd your_firends sherry
1
redis> sadd your_firends jerry
1
redis> sadd your_firends nick
1
redis> sinter my_firends your_firends
0
sherry
查看my_firends和your_firends的并集:
redis> sunion my_firends your_firends
0 jerry
1 tom
2 sherry
3 nick
4 jack
查看my_firends和your_firends的差集:
redis> sdiff my_firends your_firends
0 jack
1 tom
Zset
Zset是有序集合,与Set不同的是,它是有序的,它额外增加了一个字段用来排序:
zadd name score value
这里的这个score就是排序的依据;
示例:
redis> zadd news 0 意大利为什么无缘2022年世界杯
1
redis> zadd news 1 人类最有可能耗尽的一种地球上的矿物资源是什么?
1
redis> zadd news 2 韩日世界杯为什么日本需要和韩国合办?
1
这个数据结构常用在热点新闻、热榜等业务场景,比如可以按照点击量来计算热点新闻:
redis> zrevrange news 0 1 withscores
韩日世界杯为什么日本需要和韩国合办?
2
人类最有可能耗尽的一种地球上的矿物资源是什么?
1
这就按照score倒序取出前面两个热点新闻;