Redis基础命令:开发者必备知识 – wiki大全


Redis 基础命令:开发者必备知识

在现代高性能应用开发中,数据存储的速度和效率至关重要。Redis(Remote Dictionary Server)作为一款开源的、内存中的数据结构存储系统,常被用作数据库、缓存和消息代理。它以其闪电般的速度、丰富的数据结构和灵活的部署方式,赢得了全球开发者的青睐。

本文将深入探讨 Redis 的核心概念和一系列基础命令,这些是每个开发者在日常工作中都必备的知识。

1. Redis 简介

Redis 是一个高性能的键值存储系统,支持多种数据结构,包括字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。它将所有数据存储在内存中,因此读写速度极快,同时通过 RDB 和 AOF 机制支持数据持久化,确保数据不会丢失。

2. 连接 Redis 服务器

在开始之前,你需要一个运行中的 Redis 服务器。通常可以通过 redis-cli 命令行工具连接到 Redis 服务器:

bash
redis-cli

如果 Redis 服务器运行在非默认端口或远程主机上,可以使用 -h-p 参数:

bash
redis-cli -h your_redis_host -p 6379

连接成功后,你就可以开始执行 Redis 命令了。

3. 通用键(Key)管理命令

Redis 的所有数据都以键值对的形式存储。以下是一些通用的键管理命令:

  • KEYS pattern: 查找所有符合给定模式的键。
    • KEYS *: 查找所有键。
    • KEYS user:*: 查找所有以 user: 开头的键。
    • 注意: KEYS 命令在生产环境中慎用,因为它会遍历所有键,可能阻塞服务器。
  • EXISTS key [key ...]: 检查一个或多个键是否存在。返回存在的键的数量。
    • EXISTS mykey
  • DEL key [key ...]: 删除一个或多个键。返回成功删除的键的数量。
    • DEL mykey anotherkey
  • EXPIRE key seconds: 为键设置过期时间(以秒为单位)。
    • EXPIRE mykey 60 (键在 60 秒后过期)
  • TTL key: 返回键的剩余生存时间(Time To Live),以秒为单位。
    • -1 表示键永不过期。
    • -2 表示键不存在。
  • PERSIST key: 移除键的过期时间,使其永不过期。
    • PERSIST mykey
  • TYPE key: 返回键存储的值的数据类型。
    • TYPE mykey (可能返回 string, hash, list, set, zset 等)

4. Redis 数据类型及其基础命令

Redis 提供了丰富的数据结构,每种都有其独特的用途和操作命令。

4.1 字符串 (Strings)

字符串是 Redis 最基本的数据类型,可以存储任何形式的字符串,包括二进制数据(例如图片)。

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]: 设置键的值。
    • SET mykey "hello"
    • SET mykey "world" EX 60: 设置键值并指定 60 秒过期。
    • SET mykey "new" NX: 仅当键 mykey 不存在时才设置。
    • SET mykey "exist" XX: 仅当键 mykey 存在时才设置。
  • GET key: 获取键的值。
    • GET mykey
  • INCR key: 将键的值递增 1。键必须存储数字类型的值。
    • INCR counter
  • DECR key: 将键的值递减 1。
    • DECR counter
  • INCRBY key increment: 将键的值递增指定的增量。
    • INCRBY counter 10
  • DECRBY key decrement: 将键的值递减指定的减量。
    • DECRBY counter 5
  • APPEND key value: 将值追加到键的末尾。如果键不存在,则创建键并设置值。
    • APPEND mykey " world" (如果 mykey 是 “hello”,则变为 “hello world”)
  • STRLEN key: 返回键存储的字符串值的长度。
    • STRLEN mykey

4.2 散列 (Hashes)

散列是键值对的集合,适用于存储对象。每个散列可以存储多个字段及其对应的值。

  • HSET key field value [field value ...]: 设置散列中一个或多个字段的值。
    • HSET user:1 name "Alice" age 30 city "New York"
  • HGET key field: 获取散列中指定字段的值。
    • HGET user:1 name
  • HGETALL key: 获取散列中所有字段和值。
    • HGETALL user:1
  • HMGET key field [field ...]: 获取散列中一个或多个字段的值。
    • HMGET user:1 name age
  • HDEL key field [field ...]: 删除散列中一个或多个字段。
    • HDEL user:1 city
  • HKEYS key: 获取散列中所有字段的名称。
    • HKEYS user:1
  • HVALS key: 获取散列中所有字段的值。
    • HVALS user:1
  • HEXISTS key field: 检查散列中是否存在指定字段。
    • HEXISTS user:1 email
  • HINCRBY key field increment: 将散列中指定字段的值递增。
    • HINCRBY user:1 age 1

4.3 列表 (Lists)

列表是简单的字符串列表,按照插入顺序排序。你可以向列表的两端添加或移除元素。

  • LPUSH key value [value ...]: 将一个或多个值推入列表的左端(头部)。
    • LPUSH mylist "a" "b" "c" (列表变为 c, b, a)
  • RPUSH key value [value ...]: 将一个或多个值推入列表的右端(尾部)。
    • RPUSH mylist "x" "y" (列表变为 c, b, a, x, y)
  • LPOP key: 移除并返回列表最左端的元素。
    • LPOP mylist
  • RPOP key: 移除并返回列表最右端的元素。
    • RPOP mylist
  • LRANGE key start stop: 获取列表中指定范围内的元素。0 是第一个元素,-1 是最后一个元素。
    • LRANGE mylist 0 -1: 获取所有元素。
    • LRANGE mylist 0 1: 获取前两个元素。
  • LLEN key: 返回列表的长度。
    • LLEN mylist
  • LREM key count value: 从列表中移除与值相等的元素。
    • count > 0: 从头开始移除 count 个元素。
    • count < 0: 从尾开始移除 count 个元素。
    • count = 0: 移除所有相等的元素。
    • LREM mylist 1 "a"

4.4 集合 (Sets)

集合是字符串的无序唯一集合。你可以添加、删除、检查元素,并执行交集、并集、差集操作。

  • SADD key member [member ...]: 将一个或多个成员添加到集合中。
    • SADD myset "apple" "banana" "orange"
  • SMEMBERS key: 返回集合中的所有成员。
    • SMEMBERS myset
  • SISMEMBER key member: 检查成员是否是集合的成员。返回 1 表示是,0 表示否。
    • SISMEMBER myset "apple"
  • SREM key member [member ...]: 从集合中移除一个或多个成员。
    • SREM myset "banana"
  • SCARD key: 返回集合的成员数量。
    • SCARD myset
  • SINTER key [key ...]: 返回给定所有集合的交集。
    • SADD set1 "a" "b", SADD set2 "b" "c", SINTER set1 set2 (返回 “b”)
  • SUNION key [key ...]: 返回给定所有集合的并集。
    • SUNION set1 set2 (返回 “a”, “b”, “c”)
  • SDIFF key [key ...]: 返回给定所有集合的差集。
    • SDIFF set1 set2 (返回 “a”)

4.5 有序集合 (Sorted Sets)

有序集合类似于集合,但每个成员都会关联一个分数(score),Redis 根据分数对成员进行排序。分数相同则按字典序排序。

  • ZADD key score member [score member ...]: 将一个或多个成员及其分数添加到有序集合中。
    • ZADD myzset 1 "member1" 2 "member2" 3 "member3"
  • ZRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员。
    • ZRANGE myzset 0 -1: 返回所有成员(按分数从小到大)。
    • ZRANGE myzset 0 1 WITHSCORES: 返回前两个成员及其分数。
  • ZREVRANGE key start stop [WITHSCORES]: 返回有序集合中指定索引范围内的成员,按分数从大到小排序。
    • ZREVRANGE myzset 0 -1
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]: 返回分数在给定范围内的成员。
    • ZRANGEBYSCORE myzset 2 3: 返回分数在 2 到 3 之间的成员。
  • ZREM key member [member ...]: 从有序集合中移除一个或多个成员。
    • ZREM myzset "member1"
  • ZCARD key: 返回有序集合的成员数量。
    • ZCARD myzset
  • ZSCORE key member: 返回成员的分数。
    • ZSCORE myzset "member2"

5. 事务 (Transactions)

Redis 事务允许你在一个单独的、隔离的步骤中执行一组命令。事务中的所有命令要么全部执行,要么全部不执行。

  • MULTI: 标记事务块的开始。此后所有命令都会被放入队列,而不是立即执行。
  • EXEC: 执行所有在 MULTIEXEC 之间排队的命令。
  • DISCARD: 取消事务,放弃所有排队的命令。
  • WATCH key [key ...]: 监视一个或多个键。如果在 WATCH 之后,EXEC 之前,被监视的键被其他客户端修改了,那么事务将失败(不会执行)。
    • WATCH mykey
    • MULTI
    • INCR mykey
    • EXEC

示例:

WATCH mycounter
MULTI
INCR mycounter
EXEC

如果 mycounterWATCH 之后但在 EXEC 之前被其他客户端修改,那么 INCR 命令将不会执行。

6. 发布/订阅 (Publish/Subscribe)

Redis 提供了发布/订阅(Pub/Sub)消息范式。发布者发布消息,订阅者接收消息。

  • PUBLISH channel message: 将消息发布到指定频道。
    • PUBLISH chat "Hello everyone!"
  • SUBSCRIBE channel [channel ...]: 订阅一个或多个频道。
    • SUBSCRIBE chat news
  • PSUBSCRIBE pattern [pattern ...]: 订阅一个或多个模式(glob 风格)。
    • PSUBSCRIBE news.* (订阅所有以 news. 开头的频道)
  • UNSUBSCRIBE [channel [channel ...]]: 退订指定的频道。
  • PUNSUBSCRIBE [pattern [pattern ...]]: 退订指定的模式。

注意: 订阅者客户端在订阅模式下无法执行其他命令,除非是取消订阅命令。

7. 持久化 (Persistence)

Redis 提供了两种主要的持久化方式:

  • RDB (Redis Database): 在指定的时间间隔内将内存中的数据集快照写入磁盘。它是一个非常紧凑的文件,适合用于备份。
  • AOF (Append Only File): 记录服务器接收到的所有写操作命令,以文本协议格式追加到文件末尾。当 Redis 重启时,通过重新执行 AOF 文件中的命令来恢复数据。

开发者通常不需要直接使用命令来触发这些持久化过程(除非进行手动备份),而是通过配置 redis.conf 文件来管理它们。

总结

Redis 凭借其卓越的性能和灵活的数据结构,已经成为现代应用不可或缺的一部分。掌握这些基础命令,是你高效利用 Redis 构建健壮、高性能应用的基石。从简单缓存到复杂的消息队列,Redis 的能力远超你的想象。

继续深入学习 Redis,你可以探索更高级的命令、集群模式、Lua 脚本、以及如何将其与你选择的编程语言集成,从而充分发挥其强大功能。


滚动至顶部