Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:
通用指令是部分数据类型的,都可以使用的指令,常见的有:
通过help [command] 可以查看一个命令的具体用法,例如:
思考:Redis没有类似MySQL中的Table的概念,该如何区分不同类型的key呢?
例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1
Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:
项目名:业务名:类型:id
例如我们的项目名称叫 dcyredis,有user和product两种不同类型的数据,可以这样定义key:
dcyredis:user:1
dcyredis:product:1
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
KEY | VALUE |
---|---|
heima:user:1 | {“id”:1, “name”: “Jack”, “age”: 21} |
heima:product:1 | {“id”:1, “name”: “小米11”, “price”: 4999} |
String类型,也就是字符串类型,是Redis中最简单的存储类型。
其value是字符串,不过根据字符串的格式不同,又可以分为3类:
KEY | VALUE |
---|---|
msg | hello world |
num | 10 |
score | 92.5 |
String的常见命令有:
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
KEY | VALUE |
---|---|
dcyredis:user:1 | {name:“Jack”, age:21} |
dcyredis:user:2 | {name:“Rose”, age:18} |
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD:
KEY | VALUE | |
---|---|---|
KEY | value | |
dcyredis:user:1 | name | Jack |
age | 21 | |
dcyredis:user:2 | name | Rose |
age | 18 |
Hash的常见命令有:
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。
既可以支持正向检索和也可以支持反向检索。
特征也与LinkedList类似:
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等
List的常见命令有:
如何利用List结构模拟一个栈?
如何利用List结构模拟一个队列?
如何利用List结构模拟一个阻塞队列?
Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:
Set的常见命令有:
案例:Set命令的练习
将下列数据用Redis的Set集合来存储:
SADD zs lisi wangwu zhaoliu
SADD lisi wangwu mazi ergou
利用Set的命令实现下列功能:
SCARD zs
SINTER zs lisi
SDIFF zs lisi
SUNION zs lisi
SISMEMBER zs lisi
SISMEMBER lisi zs
SREM zs lisi
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。
SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。
SortedSet具备下列特性:
因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。
SortedSet的常见命令有:
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可
案例:SortedSet命令练习
将班级的下列学生得分存入Redis的SortedSet中:
Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76
ZADD stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
并实现下列功能:
ZREM stus Tom
ZSCORE stus Amy
ZREVRANK stus Rose
ZCOUNT stus 0 80
ZINCRBY stus 2 Amy
ZREVRANGE stus 0 2
ZRANGEBYSCORE stus 0 80