当前位置: 首页 > article >正文

Redis常用命令合集【一】

1.Redis常用命令

Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型:

在这里插入图片描述

Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( https://redis.io/commands )可以查看到不同的命令:

在这里插入图片描述

不同类型的命令称为一个group,我们也可以通过help命令来查看各种不同group的命令:
在这里插入图片描述

接下来,我们就学习常见的五种基本数据类型的相关命令。

1.1 Redis通用命令

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

  • KEYS:查看符合模板的所有key

    功能:
    查找所有符合pattern(通配符模式)的键。支持*(匹配任意字符)、?(匹配单个字符)、[](匹配指定范围字符)。

    示例:

    # 设置几个键
    SET user:1 "Alice"
    SET user:2 "Bob"
    SET product:100 "Phone"
    
    # 查询所有以"user:"开头的键
    KEYS user:*
    # 返回:1) "user:1" 2) "user:2"
    
    # 查询格式为"product:数字"的键
    KEYS product:[0-9]*
    # 返回:1) "product:100"
    

    注意事项:

    • 生产环境慎用KEYS会遍历所有键,数据量大时可能导致Redis阻塞,推荐使用SCAN命令(非阻塞迭代)。
    • 通配符需合理设计,避免模糊匹配过多键。
  • DEL:删除一个指定的key

    功能:
    删除一个或多个键,返回成功删除的键的数量。

    示例:

    # 删除单个键
    DEL user:1
    # 返回:1(表示成功删除)
    
    # 删除多个键
    DEL user:2 product:100
    # 返回:2(表示成功删除两个键)
    
    # 删除不存在的键
    DEL non_existing_key
    # 返回:0
    

    注意事项:

    • 若键不存在,则忽略不计入返回值。
  • EXISTS:判断key是否存在

    功能:
    检查一个或多个键是否存在,返回存在的键的数量(0表示全不存在)。

    示例:

    # 检查单个键
    EXISTS user:1
    # 返回:1(存在)
    
    # 检查多个键
    EXISTS user:1 product:100
    # 返回:2(两者均存在)
    
    # 检查混合存在的键
    EXISTS user:1 non_existing_key
    # 返回:1(仅user:1存在)
    

    注意事项:

    • 返回值是整数,非布尔值(需根据业务逻辑判断)。
  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除

    功能:
    为键设置过期时间(秒),到期后自动删除。返回1表示成功,0表示键不存在或设置失败。

    示例:

    # 设置键并添加10秒有效期
    SET session:abc123 "user_data"
    EXPIRE session:abc123 10
    # 返回:1(成功)
    
    # 10秒后再次获取
    GET session:abc123
    # 返回:nil(已过期删除)
    
    # 对不存在的键设置过期时间
    EXPIRE non_existing_key 60
    # 返回:0
    

    扩展命令:

    • PEXPIRE key milliseconds:以毫秒为单位设置过期时间。
    • EXPIREAT key timestamp:指定秒级UNIX时间戳过期。
    • PEXPIREAT key timestamp:指定毫秒级UNIX时间戳过期。

    注意事项:

    • 仅对可设置过期时间的键生效(如String、Hash、List等),某些类型(如HyperLogLog)不支持。
  • TTL:查看一个KEY的剩余有效期

    功能:
    返回键的剩余存活时间(秒),返回值含义:

    • -2:键不存在。
    • -1:键存在但未设置过期时间(永久有效)。
    • 正整数:剩余存活秒数。

    示例:

    # 设置键并添加60秒有效期
    SET token:xyz "temp_data"
    EXPIRE token:xyz 60
    
    # 立即查看剩余时间
    TTL token:xyz
    # 返回:59(实际剩余秒数)
    
    # 查看未设置过期的键
    TTL user:1
    # 返回:-1
    
    # 查看不存在的键
    TTL non_existing_key
    # 返回:-2
    

    扩展命令:

    • PTTL key:以毫秒为单位返回剩余时间。

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

# 查看keys命令的帮助信息:
127.0.0.1:6379> help keys

KEYS pattern
summary: Find all keys matching the given pattern
since: 1.0.0
group: generic

1.2.String类型

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

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

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

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

在这里插入图片描述

1.2.1.String的常见命令

String的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MSET:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整型的key自增1
  • INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

示例:

# 1. SET(设置或修改键值对)
SET name "John"          # 设置键 name 的值为 "John"
SET age 25               # 设置键 age 的值为整数 25
SET name "Jane"          # 修改键 name 的值为 "Jane"

# 2. GET(获取值)
GET name                 # 返回 "Jane"
GET age                  # 返回 "25"(字符串形式)
GET non_existing_key     # 返回 (nil)

# 3. MSET(批量设置)
MSET key1 "Hello" key2 "World" key3 100  # 批量设置三组键值对

# 4. MGET(批量获取)
MGET key1 key2 key3      # 返回 1) "Hello" 2) "World" 3) "100"

# 5. INCR(整型自增1)
SET counter 10
INCR counter             # 返回 11(直接操作整型)

# 6. INCRBY(整型自增步长)
INCRBY counter 5         # 返回 16(11 + 5)

# 7. INCRBYFLOAT(浮点自增步长)
SET price 9.99
INCRBYFLOAT price 1.5    # 返回 "11.49"(字符串形式)

# 8. SETNX(不存在时设置)
SETNX new_key "value"    # 返回 1(创建成功)
SETNX new_key "new_value"# 返回 0(键已存在,不执行)

# 9. SETEX(设置值并指定有效期)
SETEX session_token 3600 "abc123"  # 设置键 session_token 值为 "abc123",有效期3600秒
TTL session_token        # 返回剩余存活时间(如 3599)
1.2.2.Key结构

Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

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

这个格式并非固定,也可以根据自己的需求来删除或添加词条。这样以来,我们就可以把不同类型的数据区分开了。从而避免了key的冲突问题。

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

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

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

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

KEYVALUE
heima:user:1{“id”:1, “name”: “Jack”, “age”: 21}
heima:product:1{“id”:1, “name”: “小米11”, “price”: 4999}

并且,在Redis的桌面客户端中,还会以相同前缀作为层级结构,让数据看起来层次分明,关系清晰:

在这里插入图片描述

1.3.Hash类型

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

String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便:

在这里插入图片描述

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

在这里插入图片描述

Hash的常见命令有:

  • HSET key field value:添加或者修改hash类型key的field的值

  • HGET key field:获取一个hash类型key的field的值

  • HMSET:批量添加多个hash类型key的field的值

  • HMGET:批量获取多个hash类型key的field的值

  • HGETALL:获取一个hash类型的key中的所有的field和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

示例:

# 1. HSET(添加或修改字段值)
HSET user:1000 name "Alice"          # 设置 user:1000 的 name 字段为 "Alice"(返回 1)
HSET user:1000 age 25                # 设置 age 字段为 25(返回 1)
HSET user:1000 name "Alice Smith"    # 修改 name 字段值(返回 0,表示字段已存在时仅更新)

# 2. HGET(获取字段值)
HGET user:1000 name                  # 返回 "Alice Smith"
HGET user:1000 age                   # 返回 "25"(字符串形式)
HGET user:1000 email                 # 返回 (nil)(字段不存在)

# 3. HMSET(批量设置字段值 - 已废弃但兼容旧版本)
HMSET product:001 id "P100" price 99.9 stock 50  # 设置 product:001 的多个字段(返回 OK)

# 4. HMGET(批量获取字段值)
HMGET user:1000 name age email       # 返回 1) "Alice Smith" 2) "25" 3) (nil)
HMGET product:001 price stock        # 返回 1) "99.9" 2) "50"

# 5. HGETALL(获取所有字段和值)
HGETALL user:1000                    # 返回 1) "name" 2) "Alice Smith" 3) "age" 4) "25"

# 6. HKEYS(获取所有字段名)
HKEYS product:001                    # 返回 1) "id" 2) "price" 3) "stock"

# 7. HINCRBY(整数字段自增步长)
HINCRBY user:1000 age 2              # 返回 27(25 + 2)
HINCRBY product:001 stock -5         # 返回 45(50 - 5)

# 8. HSETNX(字段不存在时设置)
HSETNX user:1000 email "alice@example.com"  # 返回 1(成功设置新字段)
HSETNX user:1000 email "new@example.com"    # 返回 0(字段已存在,不执行)

http://www.kler.cn/a/526279.html

相关文章:

  • docker配置mysql并使用mysql connector cpp编程
  • 《DeepSeek 实用集成:大模型能力接入各类软件》
  • 信号处理以及队列
  • 我的2024年博客总结(在工作、博客和生活中找到自己的生活节奏)
  • NoSQL与SQL比较
  • sudo nvim /path/yourfile, sudo: nvim: command not found
  • 春节旅游高峰,人力资源如何巧妙应对?‌
  • Python标准库 - os (3) 调度策略、系统信息
  • 数据结构--数组链表
  • 大模型时代下的具身智能
  • 实验五---控制系统的稳定性分析---自动控制原理实验课
  • LabVIEW温度修正部件测试系统
  • 图漾相机——C++语言属性设置
  • Java 知识速记:全面解析 final 关键字
  • Linux《基础指令》
  • 动态规划DP 最长上升子序列模型 登山(题目分析+C++完整代码)
  • RocketMQ实战—2.RocketMQ集群生产部署
  • 车载软件架构 --- 基于AUTOSAR软件架构的ECU开发流程小白篇
  • 【腾讯云】腾讯云docker搭建单机hadoop
  • 窥探目标文件
  • Git进阶之旅:.gitignore 文件
  • PostgreSQL技术内幕24:定时任务调度插件pg_cron
  • 告别页面刷新!如何使用AJAX和FormData优化Web表单提交
  • 集合的奇妙世界:Python集合的经典、避坑与实战
  • 35【VS工具和c语言的关系】
  • INCOSE需求编写指南-附录 C: 需求模式