文章目录

  • ​​1. Redis常见命令​​
  • ​​2. Redis数据结构介绍​​
  • ​​3. 通用命令​​
  • ​​KEYS​​
  • ​​DEL​​
  • ​​EXISTS​​
  • ​​EXPIRE​​
  • ​​TTL​​
  • ​​4. Redis 命令类型​​
  • ​​4.1 String 类型​​
  • ​​String 类型常见命令​​
  • ​​key的层级格式​​
  • ​​4.2 Hash 类型​​
  • ​​Hash 类型常用命令​​
  • ​​4.3 List 类型​​
  • ​​List 类型的常见命令​​
  • ​​4.4 Set 类型​​
  • ​​Set 类型的常见命令​​
  • ​​4.5 SortSet 类型​​
  • ​​SortedSet 类型的常见命令​​

1. Redis常见命令

我们可以通过Redis的中文文档来学习各种命令:​​Redis官方文档​我们也可以通过菜鸟教程官网来学习:​​菜鸟教程——Redis​

2. Redis数据结构介绍

​Redis​​​ 是一个​​ key-value​​​ 的数据库,​​key 一般是 String 类型​​​,不过 ​​value​​ 的类型多种多样

Redis基础篇——Redis常见命令及数据类型详解_缓存

3. 通用命令

通用命令是指部分数据类型的,都可以使用的指令,常见的有如下所示:

Redis基础篇——Redis常见命令及数据类型详解_Redis_02

可以通过 ​​help[command]​(command命令名称) 查看一个命令的具体用法,例如:

Redis基础篇——Redis常见命令及数据类型详解_数据库_03

KEYS

查看符合模板的所有key,不建议在生产环境设备上使用

Redis基础篇——Redis常见命令及数据类型详解_数据库_04

DEL

删除一个指定的 key

我们先批量插入三组数据 ​​MSET​​ 命令批量插入

Redis基础篇——Redis常见命令及数据类型详解_缓存_05

我们通过 ​​keys *​​​ 命令可以查看我们的 ​​key​

Redis基础篇——Redis常见命令及数据类型详解_redis_06

现在我们来做一个删除操作,通过 ​​DEL key​​ 如下:

Redis基础篇——Redis常见命令及数据类型详解_redis_07

删除成功,删除了三条数据,这里虽然我们删除的是4条数据,但是本身我们只有三条。

EXISTS

判断 key 是否存在

我们先通过​​key *​​​查看一下 所有的 ​​key​​​, 在通过​​EXISTS​​​去查看 ​​key ​​是否存在,如图:

Redis基础篇——Redis常见命令及数据类型详解_redis_08

EXPIRE

给一个 key,设置有效期,有效期到期时, key 会被自动删除

Redis基础篇——Redis常见命令及数据类型详解_redis_09

TTL

查看一个KEY的剩余有效期

Redis基础篇——Redis常见命令及数据类型详解_缓存_10

4. Redis 命令类型

4.1 String 类型

String 类型,也就是字符串类型,是 Redis 中最简单的存储类型

其 value 是字符串,不过根据字符串的格式不同,又可以分为3类:

  • String: 普通字符串
  • int : 整数类型,可以做自增,自减操作
  • float :浮点类型,可以做自增,自减操作

Redis基础篇——Redis常见命令及数据类型详解_缓存_11

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m。

String 类型常见命令

Redis基础篇——Redis常见命令及数据类型详解_数据库_12

SET

添加或者修改已经存在的一个 String 类型的键值对

Redis基础篇——Redis常见命令及数据类型详解_Redis_13


GET

根据 key 获取 String 类型 的 value

Redis基础篇——Redis常见命令及数据类型详解_缓存_14


MSET

批量添加多个 String 类型的键值对

Redis基础篇——Redis常见命令及数据类型详解_List_15

MGET

根据多个 key 获取 多个 String 类型的 value

Redis基础篇——Redis常见命令及数据类型详解_缓存_16

INCR

让一个整形的 key 自增

Redis基础篇——Redis常见命令及数据类型详解_redis_17


INCRBY

让一个整形的 key 自增并指定步长(自增的数)

Redis基础篇——Redis常见命令及数据类型详解_Redis_18

INCRBYFLOAT

让一个浮点类型的数字自增并指定步长

Redis基础篇——Redis常见命令及数据类型详解_缓存_19

SETNX

添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行

Redis基础篇——Redis常见命令及数据类型详解_redis_20

SETEX

添加一个 String 类型的键值对,并且指定有效期

Redis基础篇——Redis常见命令及数据类型详解_缓存_21

key的层级格式

tips:

如果我们需要存储用户,商品信息到 redis,有一个用户 id 是 1,有一个 商品 id 恰好 也是 1,两个 id 一样,都存入 redis 岂不是产生冲突?如何解决呢-?

Redis 的 key 允许有多个单词形成层级结构,多个单词之间用 冒号 “:” 隔开,如下

​项目名:业务名:类型:id ​

这个格式并非固定,也可以根据自己的需求来删除或者添加词条。

例如:我们的项目叫做 heima,有 user 和 product 两种不同类型的数据,我们可以这样定义 key :

user 相关的 key : heima:user:1
product 相关的 key:heima:product:1

如果 Value 是一个 Java 对象,例如一个 User 对象,则可以将对象序列化为 JSON 字符串后存储:

Redis基础篇——Redis常见命令及数据类型详解_Redis_22

存储如下:

Redis基础篇——Redis常见命令及数据类型详解_List_23

4.2 Hash 类型

Hash 类型,也叫散列,其 Value 是一个无序字典,类似于 Java中的 HashMap 结构。

  • Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段做 CRUD

Hash 类型常用命令

Redis基础篇——Redis常见命令及数据类型详解_Redis_24

  • ​HSET key field value​​ 添加或者修改hash类型key的field的值
  • ​HGET key field​​ 获取一个hash类型key的field的值
  • ​HMSET​​ hmset 和 hset 效果相同 ,4.0之后hmset可以弃用了
  • ​HMGET​​ 批量获取多个hash类型key的field的值
  • ​HGETALL​​ 获取一个hash类型的key中的所有的field和value
  • ​HKEYS​​ 获取一个hash类型的key中的所有的field
  • ​ HVALS ​​获取一个hash类型的key中的所有的value
  • ​HINCRBY​​​ 让一个​​hash类型key​​的字段值自增并指定步长
  • ​HSETNX​​​ 添加一个​​hash类型的key的field​​​值,前提是这个​​field​​不存在,否则不执行

4.3 List 类型

Redis 中的 List 类型与 Java 中的 LinkedList 类似,可以看做是一个双向链表结构,既可以支持正向检索和也可以支持 反向检索

特征也与 LinkedList 类似 :

  • 有序
  • 元素可以重复
  • 插入和删除快
  • 查询速度一般

List 类型的常见命令

Redis基础篇——Redis常见命令及数据类型详解_Redis_25

扩展:

如何利用 List 结构模拟一个栈?

  • 入口(LPUSH)和出口(LPOP)在同一边

如何利用 List 结构模拟一个队列?

  • 入口和出口不在同一边

如何利用 List 结构模拟一个阻塞队列?

  • 入口和出口在不同边
  • 出队时采用 BLPOP 或 BRPOP

我们把栈和队列想象成喝酒,栈就是喝酒喝多了,想吐,那么就是 从嘴里喝进去又从嘴里吐出来,所以入口和出口在同一边,队列就相当于喝多了,但是不想吐,上厕所,那么出口和入口没在同一边

4.4 Set 类型

Redis 的 Set 结构 与 Java 中的 HashSet 类似,可以看做是一个 Value 为 null 的 HashMap,因为也是一个 hash 表,因此具备与 HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集,并集,差集等功能

Set 类型的常见命令

Redis基础篇——Redis常见命令及数据类型详解_List_26

  • ​SADD key member … ​​向set中添加一个或多个元素
  • ​SREM key member …​​ 移除set中的指定元素
  • ​SCARD key​​ 返回set中元素的个数
  • ​SISMEMBER key member​​ 判断一个元素是否存在于set中
  • ​SMEMBERS​​ 获取set中的所有元素
  • ​SINTER key1 key2 … ​​求key1与key2的交集
  • ​SDIFF key1 key2 …​​ 求key1与key2的差集
  • ​SUNION key1 key2 …​​ 求key1和key2的并集

交集,差集,并集图示:

Redis基础篇——Redis常见命令及数据类型详解_数据库_27

4.5 SortSet 类型

Redis 的 SortedSet 是一个可排序的Set集合,与 Java 中的 TreeSet 有些类似,但底层数据结构却差别很大,SortedSet中的每一个元素都带有一个 Score 属性,可以基于 Score 属性对元素排序,底层的实现是一个 跳表(SkipList)加 hash表,SortedSet 具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为 SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。

SortedSet 类型的常见命令

Redis基础篇——Redis常见命令及数据类型详解_redis_28

  • ​ZADD key score member​​ 添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ​ ZREM key member ​​删除sorted set中的一个指定元素
  • ​ZSCORE key member ​​​获取sorted set中的指定元素的score值
    *​​​ ZRANK key member​​ 获取sorted set 中的指定元素的排名
  • ​ZCARD key ​​获取sorted set中的元素个数
  • ​ZCOUNT key min max​​ 统计score值在给定范围内的所有元素的个数
  • ​ZINCRBY key increment member​​ 让sorted set中的指定元素自增,步长为指定的increment值
  • ​ZRANGE key min max​​ 按照score排序后,获取指定排名范围内的元素
  • ​ZRANGEBYSCORE key min max​​ 按照score排序后,获取指定score范围内的元素
  • ​ZDIFF、ZINTER、ZUNION​​ 求差集、交集、并集

注意:所有的排名默认都是升序,如果要降序则在​命令的Z后面添加REV即可​

如 倒叙查找 最后 3名 同学,指令 如下:

​ZREV​​RANGE key 0 2