一篇文章搞懂所有 Redis 常用命令 – wiki基地

I am sorry, but I cannot directly write files to your system. However, I can provide the full content of the article you requested. You can then copy and paste it into a file named redis_commands_explained.md or any other name you prefer.

Here is the article:

一篇文章搞懂所有 Redis 常用命令

Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)。了解其常用命令是高效使用 Redis 的关键。

本文将分类详细介绍 Redis 的常用命令,帮助你快速掌握并应用于实际项目中。


1. 通用命令 (Generic Commands)

这些命令适用于任何类型的键。

KEYS pattern

查找所有符合给定模式的 key。

注意: KEYS 命令会遍历所有 key,在生产环境中的大型数据库上使用时要非常小心,可能会阻塞服务器。

“`shell

查找所有 key

KEYS *

查找以 “user:” 开头的所有 key

KEYS user:*
“`

EXISTS key

检查给定 key 是否存在。

shell
SET name "redis"
EXISTS name # (integer) 1
EXISTS non_existing_key # (integer) 0

DEL key [key ...]

删除一个或多个 key。

shell
DEL name
DEL user:1 user:2

EXPIRE key seconds

为给定 key 设置过期时间(以秒为单位)。

shell
SET session "data"
EXPIRE session 3600 # 1小时后过期

TTL key

以秒为单位,返回给定 key 的剩余生存时间。
-1: 表示 key 永不过期。
-2: 表示 key 不存在。

shell
TTL session # (integer) 3599

TYPE key

返回 key 所储存的值的类型。

“`shell
SET mykey “value”
TYPE mykey # string

LPUSH mylist “item”
TYPE mylist # list
“`


2. 字符串 (String)

字符串是 Redis 最基本的数据类型,可以包含任何数据,比如 jpg 图片或者序列化的对象,最大能存储 512MB。

SET key value

设置指定 key 的值。

shell
SET mykey "Hello Redis"

GET key

获取指定 key 的值。

shell
GET mykey # "Hello Redis"

GETSET key value

将给定 key 的值设为 value,并返回 key 的旧值。

shell
GETSET mykey "New Value" # "Hello Redis"
GET mykey # "New Value"

MSET key value [key value ...]

同时设置一个或多个 key-value 对。

shell
MSET key1 "v1" key2 "v2" key3 "v3"

MGET key [key ...]

获取所有给定 key 的值。

shell
MGET key1 key2 key3 # 1) "v1", 2) "v2", 3) "v3"

INCR key / DECR key

将 key 中储存的数字值增一或减一。如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行操作。

shell
SET counter 100
INCR counter # (integer) 101
DECR counter # (integer) 100

STRLEN key

返回 key 所储存的字符串值的长度。

shell
STRLEN mykey # (integer) 9


3. 列表 (List)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

LPUSH key element [element ...] / RPUSH key element [element ...]

将一个或多个值插入到列表头部(左侧)或尾部(右侧)。

“`shell
LPUSH mylist “world”
LPUSH mylist “hello” # 列表内容: [“hello”, “world”]

RPUSH mylist “!” # 列表内容: [“hello”, “world”, “!”]
“`

LPOP key / RPOP key

移除并获取列表的第一个元素(左侧)或最后一个元素(右侧)。

shell
LPOP mylist # "hello"
RPOP mylist # "!"

LLEN key

获取列表的长度。

shell
LLEN mylist # (integer) 1

LRANGE key start stop

获取列表指定范围内的元素。索引 0 表示第一个元素,-1 表示最后一个元素。

“`shell

假设 mylist 内容为: [“a”, “b”, “c”, “d”]

LRANGE mylist 0 2 # 1) “a”, 2) “b”, 3) “c”
LRANGE mylist 0 -1 # 获取所有元素
“`

LINDEX key index

通过索引获取列表中的元素。

shell
LINDEX mylist 1 # "b"


4. 哈希 (Hash)

Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

HSET key field value

将哈希表 key 中的字段 field 的值设为 value。

shell
HSET user:1 name "Alice" email "[email protected]"

HGET key field

获取存储在哈希表中指定字段的值。

shell
HGET user:1 name # "Alice"

HGETALL key

获取在哈希表中指定 key 的所有字段和值。

shell
HGETALL user:1 # 1) "name", 2) "Alice", 3) "email", 4) "[email protected]"

HDEL key field [field ...]

删除一个或多个哈希表字段。

shell
HDEL user:1 email

HLEN key

获取哈希表中字段的数量。

shell
HLEN user:1 # (integer) 1

HEXISTS key field

查看哈希表的指定字段是否存在。

shell
HEXISTS user:1 name # (integer) 1
HEXISTS user:1 email # (integer) 0


5. 集合 (Set)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

SADD key member [member ...]

向集合添加一个或多个成员。

shell
SADD myset "a" "b" "c" "a"

SMEMBERS key

返回集合中的所有成员。

shell
SMEMBERS myset # 1) "c", 2) "a", 3) "b" (顺序是无序的)

SISMEMBER key member

判断 member 元素是否是集合 key 的成员。

shell
SISMEMBER myset "b" # (integer) 1
SISMEMBER myset "d" # (integer) 0

SREM key member [member ...]

移除集合中一个或多个成员。

shell
SREM myset "c"

SCARD key

获取集合的成员数。

shell
SCARD myset # (integer) 2

SINTER key [key ...] / SUNION key [key ...] / SDIFF key [key ...]

  • SINTER: 返回给定所有集合的交集。
  • SUNION: 返回给定所有集合的并集。
  • SDIFF: 返回给定所有集合的差集。

shell
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"
SINTER set1 set2 # 1) "b", 2) "c"


6. 有序集合 (Sorted Set / ZSET)

Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

ZADD key score member [score member ...]

向有序集合添加一个或多个成员,或者更新已存在成员的分数。

shell
ZADD myzset 1 "one" 2 "two" 3 "three"

ZRANGE key start stop [WITHSCORES]

通过索引区间返回有序集合成指定区间内的成员。成员按 score 值递增排序。

shell
ZRANGE myzset 0 -1 # 1) "one", 2) "two", 3) "three"
ZRANGE myzset 0 -1 WITHSCORES # 1) "one", 2) "1", 3) "two", 4) "2", ...

ZREVRANGE key start stop [WITHSCORES]

返回有序集中指定区间内的成员,通过索引,分数从高到底。

shell
ZREVRANGE myzset 0 -1 # 1) "three", 2) "two", 3) "one"

ZRANGEBYSCORE key min max [WITHSCORES]

通过分数返回有序集合指定区间内的成员。

“`shell

返回分数在 1 到 2 之间的成员

ZRANGEBYSCORE myzset 1 2 # 1) “one”, 2) “two”
“`

ZCARD key

获取有序集合的成员数。

shell
ZCARD myzset # (integer) 3

ZSCORE key member

返回有序集中,成员的分数值。

shell
ZSCORE myzset "two" # "2"

ZREM key member [member ...]

移除有序集合中的一个或多个成员。

shell
ZREM myzset "two"


总结

以上是 Redis 中最核心和常用的命令。掌握了这些命令,你就可以应对大部分的缓存和数据存储需求。Redis 的功能远不止于此,还有发布/订阅、事务、脚本等高级功能,但以上命令是你构建高效 Redis 应用的坚实基础。希望这篇文章能帮助你更好地理解和使用 Redis。

滚动至顶部