Redis 交互模式

交互模式(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 操作(因为未使用提示符,将其中命令统一使用大写表示以优化观感):

  1. 字符串(String):

    • 创建/更新:

      bash 复制代码
      SET key_name "value"
    • 读取:

      bash 复制代码
      GET key_name
    • 删除:

      bash 复制代码
      DEL key_name
  2. 哈希表(Hash):

    • 创建/更新:

      bash 复制代码
      HSET hash_name field_name field_value
    • 读取:

      bash 复制代码
      HGET hash_name field_name
      HGETALL hash_name
    • 删除:

      bash 复制代码
      HDEL hash_name field_name
  3. 列表(List):

    • 创建/更新: 其中 L 是从列表左侧(头部)插入,R 是从列表右侧(尾部)插入

      bash 复制代码
      LPUSH list_name element1 elem2 elem3
      RPUSH list_name element1
    • 读取:

      bash 复制代码
      LRANGE list_name start stop
      (LRANGE list_name 0 20)
    • 删除:
      从左侧或者右侧弹出若干个元素,默认是 1

      bash 复制代码
      LPOP list_name
      LPOP list_name 3  
      RPOP list_name
      RPOP list_name 3
  4. 集合(Set):

    集合不存在重复的元素,所有的 Member 都是唯一的,通常可以使用集合类型去重。

    • 创建/更新:

      bash 复制代码
      SADD set_name member1 member2 ...
    • 读取:

      bash 复制代码
      SMEMBERS set_name
    • 删除:

      bash 复制代码
      SREM set_name member1
  5. 有序集合(Sorted Set):

    • 创建/更新:
      有序集合的元素增加需要给定一个权重值 score

      bash 复制代码
      ZADD zset_name score member
      (ZADD zset1 1 memember1)
    • 读取:
      有序集合的读取可以显示 Score 或者不

      bash 复制代码
      ZRANGE zset_name start stop WITHSCORES
      (ZRANGE zset1 0 20 withscores)
      (ZRANGE zset1 0 20)
    • 删除:

      bash 复制代码
      ZREM zset_name member
相关推荐
编程、小哥哥1 小时前
设计模式之抽象工厂模式(替换Redis双集群升级,代理类抽象场景)
redis·设计模式·抽象工厂模式
水月梦镜花13 小时前
redis:list列表命令和内部编码
数据库·redis·list
掘金-我是哪吒15 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
ketil2717 小时前
Ubuntu 安装 redis
redis
王佑辉18 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
Karoku06619 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
gorgor在码农19 小时前
Redis 热key总结
java·redis·热key
想进大厂的小王19 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
Java 第一深情19 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
minihuabei1 天前
linux centos 安装redis
linux·redis·centos