Redis 基础完全指南:从全局命令到五大数据结构

一、Redis 简介

Redis是一个开源的高性能键值对存储系统。它支持多种数据结构,常用于缓存、消息队列、会话存储等场景。

二、基本全局命令

1. keys 命令 - 查找键

keys 命令用于查找匹配指定模式的键。

基本用法:keys 后面跟上模式字符串。

通配符说明

  • 星号 *:匹配任意数量字符
  • 问号 ?:匹配单个字符
  • 方括号 \[\]:匹配括号内的任意一个字符

示例

重要警告:在生产环境中要谨慎使用 keys * 命令,因为它会遍历整个键空间,可能导致 Redis 服务阻塞。在数据量大的情况下,应该使用 SCAN 命令代替。

2. exists 命令 - 检查键是否存在

exists 命令用于判断一个或多个键是否存在。

基本用法:exists 后面跟一个或多个键名。

返回值

  • 返回 1 表示键存在
  • 返回 0 表示键不存在
  • 检查多个键时,返回存在的键的数量

示例

3. del 命令 - 删除键

del 命令用于删除一个或多个键。

基本用法:del 后面跟一个或多个要删除的键名。

返回值

  • 返回 1 表示删除成功
  • 返回 0 表示键不存在
  • 删除多个键时,返回成功删除的键的数量

示例

4. expire 命令 - 设置过期时间

expire 命令给指定的键设置生存时间,单位是秒。

基本用法:expire 键名 秒数

返回值

  • 返回 1 表示设置成功
  • 返回 0 表示键不存在或设置失败

相关命令

  • pexpire:以毫秒为单位设置过期时间
  • expireat:指定 Unix 时间戳作为过期时间
  • persist:移除键的过期时间,使其永不过期

示例

5. ttl 命令 - 查看剩余生存时间

ttl 命令用于查看键的剩余生存时间。

基本用法:ttl 键名

返回值

  • 正整数:剩余的秒数
  • -1:键存在但没有设置过期时间(永不过期)
  • -2:键不存在

相关命令:pttl 以毫秒为单位返回剩余时间

示例

6. type 命令 - 查看键的类型

type 命令用于查看键对应的值的数据类型。

基本用法:type 键名

可能的返回值

  • string:字符串类型
  • hash:哈希表类型
  • list:列表类型
  • set:集合类型
  • zset:有序集合类型
  • none:键不存在

示例

三、基本数据结构

1. String(字符串)

String 是 Redis 最基本的数据类型,可以存储文本、数字或二进制数据。

常用命令:

set 命令:设置键的值

  • 用法:set 键名 值
  • 示例:set name "张三"

get 命令:获取键的值

  • 用法:get 键名
  • 示例:get name

mset 命令:批量设置多个键值对

  • 用法:mset 键1 值1 键2 值2 ...
  • 示例:mset key1 "value1" key2 "value2"

mget 命令:批量获取多个键的值

  • 用法:mget 键1 键2 键3 ...
  • 示例:mget key1 key2 key3

setnx 命令:仅当键不存在时才设置值

  • 用法:setnx 键名 值
  • 返回值:1 表示设置成功,0 表示键已存在

incr 命令:将键的值增加 1

  • 用法:incr 键名
  • 要求:值必须是整数

decr 命令:将键的值减少 1

  • 用法:decr 键名

incrby 命令:将键的值增加指定数值

  • 用法:incrby 键名 增量
  • 示例:incrby phone 2

decrby 命令:将键的值减少指定数值

  • 用法:decrby 键名 减量

incrbyfloat 命令:增加浮点数值

  • 用法:incrbyfloat 键名 增量
  • 示例:incrbyfloat price 1.5

append 命令:在值末尾追加字符串

  • 用法:append 键名 追加内容
  • 返回值:追加后的字符串总长度

getrange 命令:获取子字符串

  • 用法:getrange 键名 起始位置 结束位置
  • 位置从 0 开始,-1 表示最后一个字符

注意

  1. Redis 的 range 是左闭右闭区间
  2. Redis 的索引从左边开始是 0,从右边开始是 -1

setrange 命令:设置子字符串

  • 用法:setrange 键名 偏移量 新内容
  • 从指定偏移量开始替换内容

strlen 命令:获取字符串长度

  • 用法:strlen 键名
  • 返回值的字节长度

2. Hash(哈希表)

Hash 是一个键值对集合,适合存储对象。

常用命令:

hset 命令:设置哈希字段的值

  • 用法:hset 哈希键 字段名 字段值
  • 示例:hset user:1001 name "zs"

hget 命令:获取哈希字段的值

  • 用法:hget 哈希键 字段名
  • 示例:hget user:1001 name

hmset 命令:批量设置多个字段

  • 用法:hmset 哈希键 字段1 值1 字段2 值2 ...
  • 示例:hmset user:1001 name ls age 25

hmget 命令:批量获取多个字段的值

  • 用法:hmget 哈希键 字段1 字段2 ...
  • 示例:hmget user:1001 name age

hgetall 命令:获取哈希的所有字段和值

  • 用法:hgetall 哈希键
  • 返回字段和值交替的列表

hkeys 命令:获取哈希的所有字段名

  • 用法:hkeys 哈希键

hvals 命令:获取哈希的所有字段值

  • 用法:hvals 哈希键

hexists 命令:检查字段是否存在

  • 用法:hexists 哈希键 字段名
  • 返回值:1 表示存在,0 表示不存在

hdel 命令:删除哈希的一个或多个字段

  • 用法:hdel 哈希键 字段1 字段2 ...
  • 返回值:成功删除的字段数量

hlen 命令:获取哈希的字段数量

  • 用法:hlen 哈希键

hincrby 命令:增加哈希字段的整数值

  • 用法:hincrby 哈希键 字段名 增量
  • 示例:hincrby user:1001 age 1

3. List(列表)

List 是一个双向链表,可以用作栈或队列。

常用命令:

lpush 命令:从列表左边插入元素

  • 用法:lpush 列表键 元素1 元素2 ...
  • 示例:lpush tasks "task1" "task2"

rpush 命令:从列表右边插入元素

  • 用法:rpush 列表键 元素1 元素2 ...

lrange 命令:获取列表指定范围的元素

  • 用法:lrange 列表键 起始索引 结束索引
  • 索引从 0 开始,-1 表示最后一个元素
  • 示例:lrange tasks 0 -1 获取所有元素

lpop 命令:从列表左边弹出元素

  • 用法:lpop 列表键
  • 返回弹出的元素

rpop 命令:从列表右边弹出元素

  • 用法:rpop 列表键

llen 命令:获取列表长度

  • 用法:llen 列表键

lindex 命令:获取列表指定位置的元素

  • 用法:lindex 列表键 索引
  • 索引从 0 开始

lset 命令:设置列表指定位置的元素值

  • 用法:lset 列表键 索引 新值
  • 要求:索引必须存在

lrem 命令:从列表中移除元素

  • 用法:lrem 列表键 数量 元素值
  • 数量参数:
    • 大于 0:从左到右移除指定数量的匹配元素
    • 小于 0:从右到左移除指定数量的匹配元素
    • 等于 0:移除所有匹配元素

4. Set(集合)

Set 是一个无序的、元素不重复的集合。

常用命令:

sadd 命令:向集合添加元素

  • 用法:sadd 集合键 元素1 元素2 ...
  • 返回值:成功添加的元素数量

smembers 命令:获取集合的所有元素

  • 用法:smembers 集合键

sismember 命令:检查元素是否在集合中

  • 用法:sismember 集合键 元素
  • 返回值:1 表示存在,0 表示不存在

scard 命令:获取集合的元素数量

  • 用法:scard 集合键

srem 命令:从集合中移除元素

  • 用法:srem 集合键 元素1 元素2 ...
  • 返回值:成功移除的元素数量

srandmember 命令:随机获取集合中的元素

  • 用法:srandmember 集合键 数量
  • 不指定数量时返回一个随机元素
  • 指定数量时返回多个不重复的随机元素

spop 命令:随机弹出集合中的元素

  • 用法:spop 集合键 数量
  • 元素被弹出后会从集合中移除

集合运算命令

  • sinter:求多个集合的交集
  • sunion:求多个集合的并集
  • sdiff:求多个集合的差集(第一个集合有,其他集合没有的元素)

5. ZSet(有序集合)

ZSet 是一个有序的、元素不重复的集合,每个元素关联一个分数(score)。

常用命令:

zadd 命令:向有序集合添加元素

  • 用法:zadd 有序集合键 分数1 元素1 分数2 元素2 ...
  • 示例:zadd leaderboard 100 "Alice" 200 "Bob"

zrange 命令:按排名范围获取元素

  • 用法:zrange 有序集合键 起始排名 结束排名 withscores
  • 排名从 0 开始
  • 添加 withscores 选项会同时返回分数
  • 示例:zrange leaderboard 0 -1 withscores

zrank 命令:获取元素的排名(正序)

  • 用法:zrank 有序集合键 元素
  • 排名从 0 开始

zscore 命令:获取元素的分数

  • 用法:zscore 有序集合键 元素

zrangebyscore 命令:按分数范围获取元素

  • 用法:zrangebyscore 有序集合键 最小分数 最大分数 withscores
  • 示例:zrangebyscore leaderboard 100 200

zcard 命令:获取有序集合的元素数量

  • 用法:zcard 有序集合键

zrem 命令:从有序集合中移除元素

  • 用法:zrem 有序集合键 元素1 元素2 ...

zcount 命令:统计分数范围内的元素数量

  • 用法:zcount 有序集合键 最小分数 最大分数

四、使用建议和最佳实践

1. 数据结构选择指南

  • 简单键值存储:使用 String
  • 存储对象:使用 Hash
  • 需要排序或队列功能:使用 List
  • 需要去重或集合运算:使用 Set
  • 需要带权重的排序:使用 ZSet

2. 性能注意事项

  • 避免使用 keys * 命令,改用 SCAN 命令
  • 设置合理的过期时间,避免内存泄漏
  • 监控内存使用情况

3. 数据安全

  • 为重要数据设置持久化
  • 定期备份数据
  • 使用密码认证保护 Redis 实例
  • 配置合理的最大内存限制

五、总结

Redis 提供了丰富的数据结构和命令,可以满足各种不同的应用场景。掌握这些基础命令是使用 Redis 的第一步。在实际应用中,要根据具体需求选择合适的数据结构,并注意性能优化和数据安全。

记住:实践是最好的老师。多动手尝试这些命令,结合具体项目需求,你会更快掌握 Redis 的精髓。

下面是我的思维导图,以供参考:

结语:

以上就是我分享的软件设计原则的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步

谢谢观看

如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的

祝大家早安午安晚安

相关推荐
这个DBA有点耶2 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
大鸡腿同学3 小时前
大模型是怎么训练出来的?
后端
镜舟科技3 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
lizhongxuan3 小时前
判断一个人懂不懂 agent harness
后端
Databend4 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
非洲农业不发达4 小时前
windows终端体验大升级,让你拥有macos级别的美化
前端·后端
妙码生花4 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十七):登录接口完善,登录页接口整合,解决跨域
前端·后端·ai编程
SamDeepThinking4 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
shepherd1114 小时前
一文带你掌握 LLM、Token、Context、Prompt、RAG、MCP、Skill、Agent 等 AI 核心概念
人工智能·后端·ai编程