点评--day01--Redis常见命令

4 阅读4分钟

Redis是一个键值型(Key-Value)数据库,它的 Key 一般是 String 类型,但 Value 支持非常丰富的数据结构。

为了方便学习,可以通过 help 命令查看命令的具体用法,比如 help keys 查看单个命令,或 help @generic 查看通用组的命令。

1. Key 的层级结构规范

在没有 MySQL 中 Table 概念的 Redis 里,为了避免 Key 冲突并让数据关系清晰,通常通过给 Key 添加前缀并用冒号 : 隔开来形成层级结构。

  • 规范格式项目名:业务名:类型:id
  • 示例:比如 heima 项目中有 user 和 product 两种数据,可以命名为 heima:user:1heima:product:1。如果值是一个 Java 对象,通常将其序列化为 JSON 字符串后进行存储。图形化客户端会根据这种前缀自动展示出树形的层级目录。

2. Redis 通用命令

通用命令是不分具体数据类型,几乎所有 Key 都可以使用的指令:

  • KEYS:查看符合模板的所有 Key(如 keys *keys a*)。在生产环境下由于可能引发性能问题,不推荐使用。
  • DEL:删除一个或多个指定的 Key。
  • EXISTS:判断某个 Key 是否存在。
  • EXPIRE:给一个 Key 设置有效期,到期后该 Key 会被自动删除。
  • TTL:查看一个 Key 的剩余有效期(返回 -1 表示未设置过期时间,-2 表示已过期)。

3. 五大常见数据结构及命令

3.1 String 类型(字符串)

这是最简单的存储类型。它的 value 实际上不仅可以是普通字符串,还可以是整数(int)或浮点数(float),数值类型支持自增、自减操作。最大空间不能超过 512M。

  • SET / GET:添加/修改或获取一个 String 类型的键值对。
  • MSET / MGET:批量添加或获取多个 String 类型的键值对。
  • INCR / INCRBY / DECR:让整型的 value 自增 1、自增指定步长,或递减。
  • SETNX:添加一个键值对,前提是这个 Key 不存在(如果存在则不执行),常用于分布式锁。
  • SETEX:添加一个键值对的同时直接指定有效期。

3.2 Hash 类型(散列)

其 value 是一个无序字典,类似于 Java 中的 HashMap。相比于 String 存 JSON,Hash 结构可以将对象中的每个字段独立存储,可以针对单个字段做增删改查。

  • HSET / HGET:添加/修改或获取 Hash 类型 Key 中某一个 field 的值。
  • HMSET / HMGET:批量添加或获取多个 field 的值。
  • HGETALL:获取一个 Hash 类型的 Key 中的所有的 field 和 value。
  • HKEYS / HVALS:单独获取所有的 field,或所有的 value。
  • HINCRBY:让 Hash 类型中的某个 field 值自增并指定步长。

3.3 List 类型(列表)

类似于 Java 中的 LinkedList(双向链表),支持正向和反向检索。特征:有序、元素可重复、插入和删除快。常用于朋友圈点赞列表、评论列表等。

  • LPUSH / LPOP:向列表左侧(头部)插入元素,或移除并返回列表左侧的第一个元素。
  • RPUSH / RPOP:向列表右侧(尾部)插入元素,或移除并返回列表右侧的第一个元素。
  • LRANGE:返回一段角标范围内的所有元素。
  • BLPOP / BRPOP:与 LPOP/RPOP 类似,但在没有元素时会阻塞等待指定时间,而不是直接返回 nil。

3.4 Set 类型(集合)

类似于 Java 中的 HashSet(看作 value 为 null 的 HashMap)。特征:无序、元素不可重复、查找快。常用于处理共同好友、黑白名单等功能。

  • SADD / SREM:向 set 中添加一个/多个元素,或移除指定元素。
  • SCARD:返回 set 中元素的个数。
  • SISMEMBER:判断某个元素是否存在于 set 中。
  • SMEMBERS:获取 set 中的所有元素。
  • SINTER / SDIFF / SUNION:分别求多个集合的交集、差集、并集

3.5 SortedSet 类型(可排序集合 / ZSet)

类似于 Java 中的 TreeSet,但底层实现是一个跳表(SkipList)加 Hash 表。每一个元素都会带有一个 score 属性,会基于此分数对元素进行自动排序。常用于排行榜。

  • ZADD / ZREM:添加一个/多个元素(如果已存在则更新 score),或删除指定元素。
  • ZSCORE:获取指定元素的 score 值。
  • ZRANK / ZREVRANK:获取指定元素的排名(默认升序;如果在命令后加 REV 则为降序)。
  • ZCARD:获取元素个数。
  • ZCOUNT:统计 score 值在给定范围内的元素个数。
  • ZINCRBY:让指定元素自增指定的 score 步长。
  • ZRANGE / ZRANGEBYSCORE:按照排名范围或 score 范围获取元素。