文章目录
- 前言
- 第2章 Redis数据类型和常见命令
- 2.1 key结构
- 2.2 Redis通用命令
- 2.3 String类型及其常用命令
- 2.4 Hash类型及其常用命令
- 2.5 List类型
- 2.5 Set类型
- 2.6 SortedSet类型
- 2.7 小结
前言
在上一节【Redis从入门到精通(一)Redis安装与启动、Redis客户端的使用】中,学习了Redis的基本特点与优势,并比较了关系型数据库与非关系型数据库的区别;然后在Linux系统上安装了最新版本的Redis,并使用多种方式成功启动;最后学习了Redis的三种客户端,即命令行客户端、图形化桌面客户端,以及编程客户端。
这一节学习Redis的五种基本数据类型及其常见命令。
第2章 Redis数据类型和常见命令
Redis是典型的key-value对数据库,key一般是字符串,value则可以是多种不同的数据类型。 例如:
在 Redis官网(https://redis.io/commands) 已经将操作不同数据类型的命令做了分组,每一个分组里面对每一个命令都进行了解释并举例子,不得不说真是贴心:
不同类型的命令称为一个group(组),可以在命令行客户端通过help
命令来查看各种不同的命令:
接下来,就来学习一下常见的五种基本数据类型的相关命令。
2.1 key结构
Redis没有类似MySQL中的Table的概念,那该如何区分不同类型的key呢?
例如,有一个用户的id是1,有一个订单的id恰好也是1,如果此时都使用id作为key,那就会产生冲突。要解决该问题,可以通过给key添加前缀加以区分。
Redis的key允许有多个单词形成层级结构,多个单词之间使用:
隔开。
假设有个项目名称叫jingdong,则用户信息和订单信息的key可以表示为:
- 用户信息的key:
jingdong:user:1
- 订单信息的key:
jingdong:order:1
这样一来,就可以把不同类型的数据区分开了,从而避免了key的冲突问题。例如:
并且,在图形化桌面客户端中,还会以相同前缀作为层级结构,让数据看起来层次分明:
2.2 Redis通用命令
Redis通用命令是大多数数据类型都可以使用的命令,常见的有:
KEYS pattern
:查询符合模板的所有keyDEL key [key ...]
:删除一个或多个key,如果key本身不存在,则会忽略EXISTS key [key ...]
:判断key是否存在EXPIRE key seconds
:给一个key设置有效期,到期后将会自动删除TTL key
:查询一个key的剩余有效期
通过help [command]
命令可以查看一个命令的具体用法,例如:
2.3 String类型及其常用命令
String类型,也就是字符串类型,是Redis中最简单的存储类型,其最大空间不能超过512MB。
根据字符串的格式不同,又可以分为3类:
string
:普通字符串int
:整数类型,可以做自增、自减操作float
:浮点类型,可以做自增、自减操作
但不管是哪种格式,底层都是以字节数组的形式存储,只是编码方式不同。
String类型的常见命令有:
SET key value
:添加一个或者修改一个已经存在的String类型的键值对GET key
:根据key获取String类型的valueMSET key value [key value ...]
:批量添加多个String类型的键值对MGET key [key ...]
:根据多个key获取多个String类型的valueINCR key
:根据key让一个整型的value自增1INCRBY key increment
:根据key让一个整型的value自增increment指定的步长INCRBYFLOAT key increment
:根据key让一个浮点型的value自增increment指定的步长SETEX key seconds value
:添加一个String类型的键值对,并指定有效期SETNX key value
:添加一个String类型的键值对,前提是这个key不存在,否则不执行
如果一个Java对象想以String类型进行存储,可以将其序列化为JSON字符串后再存入Redis:
127.0.0.1:6379> set jingdong:user:2 "{\"name\":\"lisi\",\"age\":28}"
OK
127.0.0.1:6379> get jingdong:user:2
"{\"name\":\"lisi\",\"age\":28}"
2.4 Hash类型及其常用命令
Hash类型,也叫散列,其value值是一个无序字典,类似于Java中的HashMap对象。
当一个Java对象以序列化后的JSON字符串存入Redis时,如果要修改该对象中的某个字段,就必须将整个JSON字符串取出,反序列化后修改字段值,再将其序列化为JSON字符串,再一次存入Redis。这就非常地不方便了。
而Hash结构可以将对象中的每个字段独立存储,意味着可以针对单个字段做CRUD。
Hash类型的常见命令有:
HSET key field value [field value ...]
:添加(key或field存在时为修改)一个或多个Hash类型的数据HGET key field
:根据key和field值获取对应的value值HMSET key field value [field value ...]
:批量添加多个Hash类型数据HMGET key field [field ...]
:获取某个key下多个field值对应的value值HGETALL key
:根据key获取全部field及其对应的value值HKEYS key
:根据key获取全部field值HINCRBY key field increment
:根据key和field让一个整型的value值自增increment指定的步长HSETNX key field value
:添加一个Hash类型数据,但field值必须不存在,否则不添加
如上面的例子:
127.0.0.1:6379> hset jingdong:user:1 name Jack age 21
(integer) 2
127.0.0.1:6379> hset jingdong:user:2 name Rose age 18
(integer) 2
127.0.0.1:6379> hmget jingdong:user:1 name age
1) "Jack"
2) "21"
127.0.0.1:6379> hmget jingdong:user:2 name age
1) "Rose"
2) "18"
2.5 List类型
Redis中的List类型与Java中的LinkedList类似,可以看作一个双向链表结构,既可以支持正向检索,也可以支持反向检索。
List类型的特点是:有序、元素可重复、插入和删除快、查询速度较慢。
List类型的常见命令有:
LPUSH key element [element ...]
:向列表左侧插入一个或多个元素LPOP key [count]
:移除并返回列表左侧的的一个或count个元素RPUSH key element [element ...]
:向列表右侧插入一个或多个元素RPOP key [count]
:移除并返回列表右侧的的一个或count个元素LRANGE key start stop
:返回指定范围内(下标为start到stop)的所有元素
2.5 Set类型
Redis的Set类型与Java中的HashSet类似,可以看作是一个value值为null的HashMap。
Set类型的特点是:无序、元素不可重复、查询速度较快、支持交集、并集、差集等功能。
Set类型的常见命令有:
SADD key member [member ...]
:向Set集合添加一个或多个元素SREM key member [member ...]
:移除Set集合中的指定元素SCARD key
:返回Set集合的元素个数SISMEMBER key member
:判断一个元素是否存在于Set集合中SMEMBERS key
:获取Set集合中的所有元素SINTER key [key ...]
:求多个Set集合之间的交集
2.6 SortedSet类型
Redis的SortedSet类型是一个可排序的Set集合,与Java中的TreeSet类型。
SortedSet类型的特点是:可排序、元素不可重复、查询速度快。
SortedSet类型的常见命令有:
ZADD key score member [score member ...]
:向SortedSet集合添加一个或多个元素,如果member值已经存在,则更新其score值ZREM key member [member ...]
:删除SortedSet集合中的指定元素ZSCORE key member
:获取SortedSet集合中的指定元素的score值ZRANK key member [WITHSCORE]
:获取SortedSet集合中的指定元素的排名(升序排名)ZREVRANK key member [WITHSCORE]
:获取SortedSet集合中的指定元素的排名(降序排名)ZCARD key
:获取SortedSet集合的元素个数ZCOUNT key min max
:统计score值在指定范围内的元素个数ZINCRBY key increment member
:让SortedSet集合中的指定元素的score值自增,步长为incrementZRANGE key start stop
:按照score值排序后,获取指定排名范围内的元素ZRANGEBYSCORE key min max
:按照score值排序后,获取指定score范围内的元素ZDIFF、ZINTER、ZUNION
:求差集、交集、并集
2.7 小结
第2章到此就学习完毕了,本章的主题是:Redis数据类型和常见命令。回顾一下本章的学习的内容:
(二)String、Hash、List、Set、SortedSet类型及其常用命令
更多内容请查阅分类专栏:Redis从入门到精通
第3章主要学习:Redis的Java客户端。包括:
- Jedis客户端;
- SpringDataRedis客户端。