Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中介。它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等类型,并且提供了丰富的命令来进行数据的增删改查。
以下是一些常用 Redis 命令的详细使用说明及示例:
1. 字符串(String)
SET
- 描述:设置键值对。
- 语法 :
SET key value
- 示例 :
SET mykey "Hello Redis"
GET
- 描述:获取键对应的值。
- 语法 :
GET key
- 示例 :
GET mykey
,将返回 "Hello Redis"
DEL
- 描述:删除一个或多个键。
- 语法 :
DEL key [key ...]
- 示例 :
DEL mykey
,将删除键 "mykey"
2. 哈希(Hash)
HSET
- 描述:在哈希表中设置字段的值。
- 语法 :
HSET key field value
- 示例 :
HSET myhash field1 "value1"
HGET
- 描述:获取哈希表中字段的值。
- 语法 :
HGET key field
- 示例 :
HGET myhash field1
,将返回 "value1"
HDEL
- 描述:删除哈希表中的一个或多个字段。
- 语法 :
HDEL key field [field ...]
- 示例 :
HDEL myhash field1
,将删除哈希表 "myhash" 中的 "field1" 字段
3. 列表(List)
Redis中的列表是简单的字符串列表,按照插入顺序排序。你可以从列表的两端推入或者弹出元素。
LPUSH
- 描述:将一个或多个值插入到列表的左侧。
- 语法 :
LPUSH key value [value ...]
- 示例 :
LPUSH mylist "one"
,将一个值 "one" 插入到 "mylist" 列表的左侧。
RPUSH
- 描述:将一个或多个值插入到列表的右侧。
- 语法 :
RPUSH key value [value ...]
- 示例 :
RPUSH mylist "two"
,将一个值 "two" 插入到 "mylist" 列表的右侧。
LPOP
- 描述:移除并获取列表的第一个元素。
- 语法 :
LPOP key
- 示例 :
LPOP mylist
,移除并返回 "mylist" 列表的第一个元素。
RPOP
- 描述:移除并获取列表的最后一个元素。
- 语法 :
RPOP key
- 示例 :
RPOP mylist
,移除并返回 "mylist" 列表的最后一个元素。
LRANGE
- 描述:获取列表指定范围内的元素。
- 语法 :
LRANGE key start stop
- 示例 :
LRANGE mylist 0 -1
,获取 "mylist" 列表中的所有元素(从索引0到最后一个元素)。
4. 集合(Set)
Redis中的集合是字符串的无序集合。集合成员是唯一的,不存在重复的成员。
SADD
- 描述:将一个或多个成员添加到集合中。
- 语法 :
SADD key member [member ...]
- 示例 :
SADD myset "member1"
,将 "member1" 添加到 "myset" 集合中。
SMEMBERS
- 描述:返回集合中的所有成员。
- 语法 :
SMEMBERS key
- 示例 :
SMEMBERS myset
,返回 "myset" 集合中的所有成员。
SREM
- 描述:从集合中移除一个或多个成员。
- 语法 :
SREM key member [member ...]
- 示例 :
SREM myset "member1"
,从 "myset" 集合中移除 "member1"。
SISMEMBER
- 描述:检查给定值是否是集合的成员。
- 语法 :
SISMEMBER key member
- 示例 :
SISMEMBER myset "member1"
,检查 "member1" 是否是 "myset" 集合的成员。
5. 有序集合(Sorted Set)
Redis中的有序集合是字符串集合,每个元素都会关联一个double类型的分数。集合成员是唯一的,但分数(score)可以重复。
ZADD
- 描述:将一个或多个成员及其分数添加到有序集合中。
- 语法 :
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
- 示例 :
ZADD mysortedset 1 "one"
,将 "one" 及其分数1添加到 "mysortedset" 有序集合中。
ZRANGE
- 描述:返回有序集合中指定排名范围的成员。
- 语法 :
ZRANGE key start stop [WITHSCORES]
- 示例 :
ZRANGE mysortedset 0 -1 WITHSCORES
,返回 "mysortedset" 有序集合中的所有成员及其分数。
ZREM
- 描述:从有序集合中移除一个或多个成员。
- 语法 :
ZREM key member [member ...]
- 示例 :
ZREM mysortedset "one"
,从 "mysortedset" 有序集合中移除 "one"。
ZRANK
- 描述:返回有序集合中指定成员的排名。
- 语法 :
ZRANK key member
- 示例 :
ZRANK mysortedset "one"
,返回 "one" 在 "mysortedset" 有序集合中的排名。
6. 键值对通用命令
EXISTS
- 描述:检查一个键是否存在。
- 语法 :
EXISTS key [key ...]
- 示例 :
EXISTS mykey
,如果键 "mykey" 存在则返回 1,否则返回 0。
TYPE
- 描述:返回键所存储的值的类型。
- 语法 :
TYPE key
- 示例 :
TYPE mykey
,将返回 "string"、"hash"、"list"、"set"、"zset" 等类型。
EXPIRE
- 描述:为键设置一个过期时间(以秒为单位)。
- 语法 :
EXPIRE key seconds
- 示例 :
EXPIRE mykey 10
,将 "mykey" 的过期时间设置为 10 秒后。
TTL
- 描述:获取键的剩余生存时间(TTL, time to live)。
- 语法 :
TTL key
- 示例 :
TTL mykey
,如果 "mykey" 设置了过期时间,则返回剩余的秒数;否则返回 -1。
7. 发布/订阅模式
PUBLISH
- 描述:发布消息到指定的频道。
- 语法 :
PUBLISH channel message
- 示例 :
PUBLISH mychannel "Hello, Redis!"
,将消息 "Hello, Redis!" 发布到 "mychannel" 频道。
SUBSCRIBE
- 描述:订阅一个或多个频道。
- 语法 :
SUBSCRIBE channel [channel ...]
- 示例 :
SUBSCRIBE mychannel
,订阅 "mychannel" 频道。
UNSUBSCRIBE
- 描述:退订一个或多个频道。
- 语法 :
UNSUBSCRIBE [channel [channel ...]]
- 示例 :
UNSUBSCRIBE mychannel
,退订 "mychannel" 频道。
8. 服务器相关命令
INFO
- 描述:获取服务器的信息。
- 语法 :
INFO [section]
- 示例 :
INFO server
,获取服务器的详细信息。
FLUSHDB
- 描述:删除当前数据库中的所有键。
- 语法 :
FLUSHDB
- 示例 :
FLUSHDB
,删除当前数据库中的所有键。
FLUSHALL
- 描述:删除所有数据库中的所有键。
- 语法 :
FLUSHALL
- 示例 :
FLUSHALL
,删除所有数据库中的所有键。
PING
- 描述:测试服务器是否运行正常。
- 语法 :
PING
- 示例 :
PING
,如果服务器正常,则返回 "PONG"。
ECHO
- 描述:回显给定的字符串。
- 语法 :
ECHO message
- 示例 :
ECHO "Hello, Redis!"
,服务器将返回"Hello, Redis!"。
9. 事务处理
Redis支持简单的事务处理,允许用户将多个命令打包成一个事务块,以确保这些命令的原子性执行。
MULTI
- 描述:标记一个事务块的开始。
- 语法 :
MULTI
- 示例 :
MULTI
,开始一个新的事务块。
EXEC
- 描述:执行事务块中的所有命令。
- 语法 :
EXEC
- 示例 :在
MULTI
命令之后,可以输入多个Redis命令,然后使用EXEC
命令执行它们。
DISCARD
- 描述:取消事务,放弃事务块中的所有命令。
- 语法 :
DISCARD
- 示例 :
DISCARD
,取消当前未执行的事务块。
10. Lua 脚本
Redis支持使用Lua脚本执行多个命令,并可以将脚本的结果作为单个命令的返回值。
EVAL
- 描述:执行一个Lua脚本。
- 语法 :
EVAL script numkeys key [key ...] arg [arg ...]
- 示例 :
EVAL "return {KEYS[1],ARGV[1]}" 1 mykey myvalue
,这个脚本将返回键"mykey"和参数"myvalue"。
EVALSHA
- 描述:使用脚本的SHA1摘要执行Lua脚本,用于缓存脚本。
- 语法 :
EVALSHA sha1 numkeys key [key ...] arg [arg ...]
- 示例 :首先,你需要使用
SCRIPT LOAD
命令将脚本加载到Redis中,并获取其SHA1摘要,然后使用EVALSHA
和该摘要执行脚本。
11. 持久化
Redis支持将数据持久化到磁盘上,以防止数据丢失。
SAVE
- 描述:同步保存当前数据库的数据到磁盘上。
- 语法 :
SAVE
- 注意 :
SAVE
命令会阻塞Redis服务器直到保存完成,因此不建议在生产环境中频繁使用。
BGSAVE
- 描述:在后台异步保存当前数据库的数据到磁盘上。
- 语法 :
BGSAVE
- 注意 :
BGSAVE
命令不会阻塞Redis服务器,它会在后台执行保存操作。
12. 数据迁移
Redis支持将数据从一个实例迁移到另一个实例。
MIGRATE
- 描述:将键从一个Redis实例迁移到另一个Redis实例。
- 语法 :
MIGRATE host port key|"" destination-db timeout [COPY] [REPLACE] [KEYS key [key ...]] [DB num] [AUTH password] [KEYS_ASK] [CLUSTER]
- 示例 :
MIGRATE 127.0.0.1 6380 mykey 0 5000 REPLACE
,这个命令将键"mykey"从当前实例迁移到运行在127.0.0.1:6380
的Redis实例上,并使用REPLACE
选项来覆盖目标实例上已存在的键。
13. 扫描命令
Redis提供了扫描命令来迭代数据库中的键,而不是一次性获取所有键(这可能会导致Redis阻塞)。
SCAN
- 描述:迭代数据库中的键。
- 语法 :
SCAN cursor [MATCH pattern] [COUNT count]
- 示例 :
SCAN 0 MATCH user*: COUNT 100
,这个命令将从游标0开始,迭代所有以"user:"开头的键,并每次返回最多100个键。
14. 配置命令
Redis支持一系列的配置命令,允许用户查询或修改服务器的配置参数。
CONFIG GET
- 描述:获取配置参数的值。
- 语法 :
CONFIG GET parameter
- 示例 :
CONFIG GET maxmemory
,获取Redis实例的最大内存限制。
CONFIG SET
- 描述:设置配置参数的值。
- 注意 :不是所有的配置参数都可以使用
CONFIG SET
命令来动态修改。有些配置参数需要在Redis服务器启动时设置,或者需要重启服务器才能使修改生效。 - 语法 :
CONFIG SET parameter value
- 示例 :
CONFIG SET maxmemory 1073741824
,将Redis实例的最大内存限制设置为1GB(1073741824字节)。
15. 客户端命令
Redis提供了一些命令来管理客户端连接。
CLIENT LIST
- 描述:列出当前连接到Redis服务器的所有客户端连接。
- 语法 :
CLIENT LIST
- 示例 :
CLIENT LIST
,列出所有客户端连接及其详细信息。
CLIENT KILL
- 描述:关闭指定的客户端连接。
- 语法 :
CLIENT KILL [ip:port] [ID client-id] [TYPE normal|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
- 示例 :
CLIENT KILL IPADDR 127.0.0.1:6379
,关闭来自IP地址127.0.0.1和端口6379的客户端连接。