Redis(Remote Dictionary Server,远程字典服务)是一个开源的键值存储系统,通常用作数据库、缓存或消息传递系统。它支持多种数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。本文将详细介绍Redis的一些常用操作命令,帮助你更好地使用Redis。
1. 连接命令
1.1 redis-cli
redis-cli
是 Redis 的命令行客户端工具,用于连接 Redis 服务器并执行命令。
redis-cli -h [hostname] -p [port] -a [password]
-
-h [hostname]
:指定 Redis 服务器的主机名,默认为127.0.0.1
。 -
-p [port]
:指定 Redis 服务器的端口号,默认为6379
。 -
-a [password]
:指定连接密码,如果 Redis 服务器设置了密码。
2. 字符串(Strings)操作
2.1 SET key value
设置键的字符串值。
SET mykey "Hello, Redis!"
2.2 GET key
获取与给定键相关联的值。
GET mykey
2.3 SETEX key seconds value
设置键的值及其过期时间(秒)。
SETEX mykey 10 "Hello, Redis with TTL!"
补充:TTL key
获取键的剩余过期时间(秒)。
TTL
命令的返回值有三种情况:
返回-2:当键不存在时,返回-2。
返回-1:当键存在但没有设置剩余生存时间时,返回-1。这意味着键是永久有效的,不会自动过期。
返回正整数:当键存在且已设置过期时间时,返回键的剩余生存时间(以秒为单位)。
示例:
键不存在
redis> TTL non_existing_key (integer) -2
键存在但没有设置过期时间
redis> SET mykey "Hello" OK redis> TTL mykey (integer) -1
键存在且已设置过期时间
redis> SET mykey "Hello" EX 60 OK redis> TTL mykey (integer) 57
注意事项:
在Redis 2.8版本之前,当键不存在或没有设置过期时间时,
TTL
命令都返回-1。从Redis 2.8版本开始,当键不存在时返回-2,当键存在但没有设置过期时间时返回-1。
2.4 INCR key
将键的值增加1。
INCR mycounter
2.5 DECR key
将键的值减少1。
DECR mycounter
2.6 GETRANGE key start end
获取键值的一部分。
GETRANGE mykey 0 3
2.7 SETRANGE key offset value
从指定的偏移量开始,替换键值的一部分。
SETRANGE mykey 0 "NewValue"
2.8 STRLEN key
获取键值的长度。
STRLEN mykey
3. 哈希(Hashes)操作
3.1 HSET key field value
设置哈希表中字段的值。
HSET user:1000 username "Alice" age 30
3.2 HGET key field
获取哈希表中字段的值。
HGET user:1000 username
3.3 HGETALL key
获取哈希表中所有的字段和值。
HGETALL user:1000
3.4 HDEL key field1 [field2 ...]
删除哈希表中的一个或多个字段。
HDEL user:1000 username
3.5 HEXISTS key field
检查哈希表中是否存在指定的字段。
HEXISTS user:1000 username
3.6 HINCRBY key field increment
将哈希表中字段的值增加指定的整数。
HINCRBY user:1000 age 1
3.7 HINCRBYFLOAT key field increment
将哈希表中字段的值增加指定的浮点数。
HINCRBYFLOAT user:1000 score 0.5
4. 列表(Lists)操作
4.1 LPUSH key value1 [value2 ...]
将一个或多个值插入到列表头部。
LPUSH mylist "item1" "item2" "item3"
4.2 RPUSH key value1 [value2 ...]
将一个或多个值插入到列表尾部。
RPUSH mylist "item4" "item5"
4.3 LRANGE key start stop
获取列表中指定区间内的元素。
LRANGE mylist 0 -1
4.4 LPOP key
移除并返回列表的第一个元素。
LPOP mylist
4.5 RPOP key
移除并返回列表的最后一个元素。
RPOP mylist
4.6 LINDEX key index
获取列表中指定位置的元素。
LINDEX mylist 0
4.7 LINSERT key BEFORE|AFTER pivot value
在列表中指定元素的前后插入一个元素。
LINSERT mylist BEFORE "item2" "newitem"
4.8 LLEN key
获取列表的长度。
LLEN mylist
4.9 LSET key index value
设置列表中指定位置的元素值。
LSET mylist 0 "newitem1"
5. 集合(Sets)操作
5.1 SADD key member1 [member2 ...]
将一个或多个成员添加到集合中。
SADD myset "item1" "item2" "item3"
5.2 SMEMBERS key
获取集合中的所有成员。
SMEMBERS myset
5.3 SISMEMBER key member
判断成员是否是集合的成员。
SISMEMBER myset "item1"
5.4 SREM key member1 [member2 ...]
移除集合中的一个或多个成员。
SREM myset "item1"
5.5 SDIFF key1 [key2 ...]
获取多个集合的差集。
SDIFF set1 set2
5.6 SDIFFSTORE destination key1 [key2 ...]
获取多个集合的差集,并将结果存储在新的集合中。
SDIFFSTORE diffset set1 set2
5.7 SINTER key1 [key2 ...]
获取多个集合的交集。
SINTER set1 set2
5.8 SINTERSTORE destination key1 [key2 ...]
获取多个集合的交集,并将结果存储在新的集合中。
SINTERSTORE intersectset set1 set2
5.9 SUNION key1 [key2 ...]
获取多个集合的并集。
SUNION set1 set2
5.10 SUNIONSTORE destination key1 [key2 ...]
获取多个集合的并集,并将结果存储在新的集合中。
SUNIONSTORE unionset set1 set2
6. 有序集合(Sorted Sets)操作
6.1 ZADD key score1 member1 [score2 member2 ...]
将一个或多个成员添加到有序集合中,或者更新其分数。
ZADD myzset 1 "item1" 2 "item2" 3 "item3"
6.2 ZRANGE key start stop [WITHSCORES]
获取有序集合中指定区间内的成员,可选地获取其分数。
ZRANGE myzset 0 -1 WITHSCORES
6.3 ZSCORE key member
获取有序集合中成员的分数。
ZSCORE myzset "item1"
6.4 ZREM key member1 [member2 ...]
移除有序集合中的一个或多个成员。
ZREM myzset "item1"
6.5 ZCOUNT key min max
获取有序集合中指定区间的元素数量。
ZCOUNT myzset 1 3
6.6 ZINCRBY key increment member
将有序集合中成员的分数增加指定的值。
ZINCRBY myzset 1 "item1"
6.7 ZRANK key member
获取有序集合中成员的排名(从小到大)。
ZRANK myzset "item1"
6.8 ZREVRANK key member
获取有序集合中成员的排名(从大到小)。
ZREVRANK myzset "item1"
6.9 ZREMRANGEBYRANK key start stop
移除有序集合中指定排名范围内的成员。
ZREMRANGEBYRANK myzset 0 1
6.10 ZREMRANGEBYSCORE key min max
移除有序集合中指定分数范围内的成员。
ZREMRANGEBYSCORE myzset 1 2
7. 事务(Transactions)操作
7.1 MULTI
标记事务块的开始。
MULTI
7.2 EXEC
执行事务块中的所有命令。
EXEC
7.3 DISCARD
取消事务,放弃事务块中的所有命令。
DISCARD
7.4 WATCH key1 [key2 ...]
监视一个或多个键,如果在事务执行之前这些键的值被修改了,则事务会失败。
WATCH mykey
7.5 UNWATCH
取消所有被监视的键。
UNWATCH
8. 其他常用命令
8.1 FLUSHDB
清空当前数据库中的所有键。
FLUSHDB
8.2 FLUSHALL
清空所有数据库中的所有键。
FLUSHALL
8.3 INFO [section]
获取服务器的信息和统计。
INFO
8.4 CONFIG GET parameter
获取配置参数的值。
CONFIG GET maxmemory
8.5 CONFIG SET parameter value
设置配置参数的值。
CONFIG SET maxmemory 1gb
8.6 AUTH password
连接时验证密码。
AUTH mypassword
8.7 ECHO message
打印消息。
ECHO "Hello, Redis!"
8.8 SELECT index
切换到指定的数据库。
SELECT 1
8.9 SHUTDOWN [NOSAVE|SAVE]
关闭Redis服务器,可选地保存数据。
SHUTDOWN SAVE
8.10 BGSAVE
在后台异步保存数据。
BGSAVE
8.11 SAVE
同步保存数据。
SAVE
8.12 LASTSAVE
获取上次成功保存数据的时间。
LASTSAVE
8.13 DBSIZE
获取当前数据库的键数量。
DBSIZE
8.14 TIME
获取当前服务器时间。
TIME
9. 示例
9.1 连接Redis服务器
打开终端,使用 redis-cli
连接到Redis服务器:
redis-cli -h 127.0.0.1 -p 6379
9.2 设置和获取字符串值
设置键 mykey
的值为 "Hello, Redis!"
,然后获取该键的值:
SET mykey "Hello, Redis!"
GET mykey
9.3 设置和获取哈希表值
设置哈希表 user:1000
的字段 username
和 age
,然后获取这些字段的值:
HSET user:1000 username "Alice" age 30
HGET user:1000 username
HGET user:1000 age
9.4 操作列表
将多个值插入到列表 mylist
中,然后获取列表中的所有元素:
LPUSH mylist "item1" "item2" "item3"
RPUSH mylist "item4" "item5"
LRANGE mylist 0 -1
9.5 操作集合
将多个成员添加到集合 myset
中,然后获取集合中的所有成员:
SADD myset "item1" "item2" "item3"
SMEMBERS myset
9.6 操作有序集合
将多个成员及其分数添加到有序集合 myzset
中,然后获取有序集合中的所有成员及其分数:
ZADD myzset 1 "item1" 2 "item2" 3 "item3"
ZRANGE myzset 0 -1 WITHSCORES
9.7 事务操作
开始一个事务,执行多个命令,然后提交事务:
MULTI
SET mykey1 "value1"
SET mykey2 "value2"
EXEC
10. 总结
Redis提供了丰富的操作命令,支持多种数据结构,能够满足不同的应用场景。通过本文介绍的命令,你可以快速上手Redis,进行数据的存储、查询和管理。