一、数据结构
Redis是典型的键值数据库,key一般是字符串,而value包含很多不同的数据类型。
Value结构:
Key结构:
Redis的key允许有多个单词形成层级结构,多个单词之间用':'隔开,格式为:
项目名:业务名:类型:id
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
并且,在Redis的桌面客户端中,还会以相同前缀作为层级结构,让数据看起来层次分明,关系清晰:
二、命令
1、通用命令:
通用指令支持部分数据类型的,常见的有:
通过help [command] 可以查看一个命令的具体用法,例如:
# 查看keys命令的帮助信息:
127.0.0.1:6379> help keysKEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic#小技巧:输入 help @ 后按tab键查询各种说明
2、String类型:
String类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:
不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m。
常用命令:
3、Hash类型
Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构;
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD,可理解为将Value变为一个新的键值对容器:
常用命令:
4、List类型(单键多值)
Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构,既可以支持正向检索和也可以支持反向检索。特征也与LinkedList类似:
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
常用命令:
5、Set类型(单键多值)
Redis的Set结构与Java中的HashSet类似,具备以下特征:
常用命令:
6、SortedSet类型(有序集合Zset)
Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。 SortedSet具有以下特性:
- 可按Score属性排序
- 元素不重复
- 查询速度快
因为SortedSet的可排序特性,经常被用来实现类似成绩表的功能。
常用方法:
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可: