一、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 表示最后一个字符


注意:
- Redis 的 range 是左闭右闭区间
- 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 的精髓。
下面是我的思维导图,以供参考:

结语:
以上就是我分享的软件设计原则的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步
谢谢观看
如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的
祝大家早安午安晚安
