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