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 的精髓。

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

结语:

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

谢谢观看

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

祝大家早安午安晚安

相关推荐
用户2190326527352 小时前
Spring Boot4.0整合RabbitMQ死信队列详解
java·后端
独自归家的兔2 小时前
大模型通义千问3-VL-Plus - QVQ 视觉推理模型
java·人工智能·intellij-idea
nnsix2 小时前
Unity ReferenceFinder插件 窗口中选择资源时 同步选择Assets下的资源
java·unity·游戏引擎
天天摸鱼的java工程师2 小时前
🚪单点登录实战:同端同账号互踢下线的最佳实践(Java 实现)
java·后端
Kiri霧2 小时前
Go 结构体
java·开发语言·golang
小飞Coding2 小时前
Java堆外内存里的“密文”--从内存内容反推业务模块实战
jvm·后端
狂奔小菜鸡2 小时前
Day29 | Java集合框架之Map接口详解
java·后端·java ee
踏浪无痕2 小时前
告别手写 TraceId!Micrometer 链路追踪在 Spring Boot 中的落地实践
后端·spring cloud·架构
沐知全栈开发2 小时前
《jQuery 密码验证》
开发语言