安装 Redis 时通常连带安装了一个 Redis CLI (apt install redis 或者是 apt install redis-cli 类似的)。在本博客中将会对 redis-cli 中的常用命令做一个使用介绍,下文中以黑色代码块表示在 redis-cli 的实际操作,其中使用 “127.0.0.1:6379>” 字符串表示当前正在输入的命令。注意:本文中仅列出我所使用的常用命令,未必适合所有的人,为了适合索引和使用,应尽可能简约详尽。
在任何命令行中,你可以通过以下命令进入到交互模式/或者说是 Redis 客户端工具。
redis-cli
或者更详细的如下面所示,使用了 Host 和 Port 的参数,用于指定 Redis Server 的主机和端口。
redis-cli -h 127.0.0.1 -p 6379
连接后的状态大概如下,这个时候就进入到了交互模式的最初状态,你的输入将始终显示在 “>” 符号之后。
127.0.0.1:6379>
redis 提供了一些安全措施,其中之一是认证或者是验证用户权限。在 redis.conf 启用 requirepass 配置,下面这个例子是在 redis.conf 中设置了一个 pass 作为认证依据。
# redis.conf
...
requirepass your-password
在设置了 “requirepass” 之后,Redis Server 将拒绝所有未认证的查询。你可以使用以下命令来进行认证。
127.0.0.1:6379> auth your-password
OK
在 Redis 中,默认情况下有 16 个数据库(编号从 0 到 15)。每个数据库都是相对独立的命名空间,允许用户在同一个 Redis 服务器中存储多个不同的数据集(dataset)。
在连接到 Redis 服务器时,默认使用的是第一个数据库(编号为 0)。可以使用 SELECT 命令切换到其他数据库,例如:
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
此时你的提示符变成了 127.0.0.1:6379[1]
,即意味着当前处于数据库 1 中。
当然你可以使用 CONFIG 命令实时得查到当前的数据库数量,查询结果是一个数组:
127.0.0.1:6379[1]> config get databases
1) "databases"
2) "16"
下面列出一些还可能使用到的数据库操作:
127.0.0.1:6379[1]> keys *
1) "key1"
2) "key2"
请注意如果较大的数据库应该避免使用这个命令,这个命令将会遍历整个键空间(Key space),可能会影响数据库的性能。
KEYS 命令还支持使用 glob 模式进行模糊查询,例如:
匹配前缀是 key 的
127.0.0.1:6379[1]> keys key*
匹配包含某个词的
127.0.0.1:6379[1]> keys *word*
匹配以某个字符结尾的
127.0.0.1:6379[1]> keys *d
使用 ? 进行单字符匹配
127.0.0.1:6379[1]> keys *
1) "user:hong:age"
2) "user:xiaoming:age"
127.0.0.1:6379[1]> keys user:????:age
1) "user:hong:age"
在这个例子中,设置了两个 key;使用 “????” 匹配四个字符,所以结果“xiaoming” 没有被匹配。
使用字符范围匹配
127.0.0.1:6379[1]> keys *
1) "b"
2) "c"
3) "a"
127.0.0.1:6379[1]> keys [a-z]
1) "b"
2) "c"
3) "a"
127.0.0.1:6379[1]> keys [a-b]
1) "b"
2) "a"
127.0.0.1:6379[1]> keys [a,b]
1) "b"
2) "a"
127.0.0.1:6379[1]> keys [a,b,c]
1) "b"
2) "c"
3) "a"
查看当前数据库中键的数量
127.0.0.1:6379> dbsize
(integer) 5
清空当前数据库
127.0.0.1:6379> flushdb
OK
清空所有数据库
127.0.0.1:6379> flushall
OK
删除键
删除一个名为 key_name 的键,如果没有或者失败,会返回 0,反之则 1
127.0.0.1:6379> del key_name
(integer) 0
判断键是否存在
127.0.0.1:6379> exists key_name
(integer) 0
设置键的过期时间
为 key_name 设置 50 秒的过期时间,单位为秒。键将在指定的时间后自动删除。
127.0.0.1:6379> expire key_name 50
(integer) 1
查看键的过期时间
返回指定键的剩余过期时间,单位为秒。返回 -1 表示键没有设置过期时间,返回 -2 表示键不存在或已过期。
127.0.0.1:6379> ttl key_name
(integer) 55
在 Redis 中常用的数据类型有字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。另外有一些较为不常用的:Geospatial、Bitmaps…等。对于不太常用的,在这里不做更多介绍。
Redis 是典型的键值对型数据库,每种类型在 Redis 中都以键值对存储,其中 Value 中的内容有数据类型的差异。其中每一个键值对所表示的数据叫做数据集(dataset)。如果要删除一个数据集,也就是删除这个键,无论这个数据集是何种类型,都可以直接使用 del key_name
的命令进行删除。
以下是一些常见的 Redis 数据结构及其基本的 CRUD 操作(因为未使用提示符,将其中命令统一使用大写表示以优化观感):
字符串(String):
SET key_name "value"
GET key_name
DEL key_name
哈希表(Hash):
HSET hash_name field_name field_value
HGET hash_name field_name
HGETALL hash_name
HDEL hash_name field_name
列表(List):
LPUSH list_name element1 elem2 elem3
RPUSH list_name element1
LRANGE list_name start stop
(LRANGE list_name 0 20)
LPOP list_name
LPOP list_name 3
RPOP list_name
RPOP list_name 3
集合(Set):
集合不存在重复的元素,所有的 Member 都是唯一的,通常可以使用集合类型去重。
SADD set_name member1 member2 ...
SMEMBERS set_name
SREM set_name member1
有序集合(Sorted Set):
ZADD zset_name score member
(ZADD zset1 1 memember1)
ZRANGE zset_name start stop WITHSCORES
(ZRANGE zset1 0 20 withscores)
(ZRANGE zset1 0 20)
ZREM zset_name member