Redis 交互模式

发布时间:2024年01月16日

交互模式(Interact Mode)

安装 Redis 时通常连带安装了一个 Redis CLI (apt install redis 或者是 apt install redis-cli 类似的)。在本博客中将会对 redis-cli 中的常用命令做一个使用介绍,下文中以黑色代码块表示在 redis-cli 的实际操作,其中使用 “127.0.0.1:6379>” 字符串表示当前正在输入的命令。注意:本文中仅列出我所使用的常用命令,未必适合所有的人,为了适合索引和使用,应尽可能简约详尽。

1.连接 Connection

在任何命令行中,你可以通过以下命令进入到交互模式/或者说是 Redis 客户端工具。

redis-cli

或者更详细的如下面所示,使用了 Host 和 Port 的参数,用于指定 Redis Server 的主机和端口。

redis-cli -h 127.0.0.1 -p 6379

连接后的状态大概如下,这个时候就进入到了交互模式的最初状态,你的输入将始终显示在 “>” 符号之后。

127.0.0.1:6379> 

2. 认证 Authentication

redis 提供了一些安全措施,其中之一是认证或者是验证用户权限。在 redis.conf 启用 requirepass 配置,下面这个例子是在 redis.conf 中设置了一个 pass 作为认证依据。

# redis.conf
...
requirepass your-password

在设置了 “requirepass” 之后,Redis Server 将拒绝所有未认证的查询。你可以使用以下命令来进行认证。

127.0.0.1:6379> auth your-password 
OK

3. 数据库操作

在 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"

下面列出一些还可能使用到的数据库操作:

3.1 查看数据库的所有键

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"

3.2 其余数据库操作

查看当前数据库中键的数量

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

4. 数据类型操作

在 Redis 中常用的数据类型有字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)。另外有一些较为不常用的:Geospatial、Bitmaps…等。对于不太常用的,在这里不做更多介绍。

Redis 是典型的键值对型数据库,每种类型在 Redis 中都以键值对存储,其中 Value 中的内容有数据类型的差异。其中每一个键值对所表示的数据叫做数据集(dataset)。如果要删除一个数据集,也就是删除这个键,无论这个数据集是何种类型,都可以直接使用 del key_name 的命令进行删除。

以下是一些常见的 Redis 数据结构及其基本的 CRUD 操作(因为未使用提示符,将其中命令统一使用大写表示以优化观感):

  1. 字符串(String):

    • 创建/更新:
      SET key_name "value"
      
    • 读取:
      GET key_name
      
    • 删除:
      DEL key_name
      
  2. 哈希表(Hash):

    • 创建/更新:
      HSET hash_name field_name field_value
      
    • 读取:
      HGET hash_name field_name
      HGETALL hash_name
      
    • 删除:
      HDEL hash_name field_name
      
  3. 列表(List):

    • 创建/更新: 其中 L 是从列表左侧(头部)插入,R 是从列表右侧(尾部)插入
      LPUSH list_name element1 elem2 elem3
      RPUSH list_name element1
      
    • 读取:
      LRANGE list_name start stop
      (LRANGE list_name 0 20)
      
    • 删除:
      从左侧或者右侧弹出若干个元素,默认是 1
      LPOP list_name
      LPOP list_name 3  
      RPOP list_name
      RPOP list_name 3
      
  4. 集合(Set):
    集合不存在重复的元素,所有的 Member 都是唯一的,通常可以使用集合类型去重。

    • 创建/更新:
      SADD set_name member1 member2 ...
      
    • 读取:
      SMEMBERS set_name
      
    • 删除:
      SREM set_name member1
      
  5. 有序集合(Sorted Set):

    • 创建/更新:
      有序集合的元素增加需要给定一个权重值 score
      ZADD zset_name score member
      (ZADD zset1 1 memember1)
      
    • 读取:
      有序集合的读取可以显示 Score 或者不
      ZRANGE zset_name start stop WITHSCORES
      (ZRANGE zset1 0 20 withscores)
      (ZRANGE zset1 0 20)
      
    • 删除:
      ZREM zset_name member
      
文章来源:https://blog.csdn.net/qq_39177678/article/details/135619180
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。