Redis基础篇09 — 使用命令(一)基础命令和对 key 的操作命令
本文最后更新于 273 天前,其中的信息可能已经有所发展或是发生改变。

命令分类

在 Redis 基础篇当中,根据用户操作对象的不同,相关的命令也不同,大体可分为三类:

  • 基础性命令
  • 对 key 的操作命令
  • 对 value 的操作命令

命令的补齐和 Shell 命令的补齐方式一样,都是使用 Tab 键。

所有的命令都可以在这里找到用法和说明—— https://redis.io/commands/

基础性命令

# 首先将我们的 Redis 实例启动
Shell > /usr/local/redis/bin/redis-server  /usr/local/redis/conf/redis.conf

# 接着使用 redis-cli 连接到 Redis ,不指定数据库,默认使用 0 号数据库。相关的 Shell 命令为:
Shell > /usr/local/redis/bin/redis-cli -h 192.168.100.3 -p 6379 -a MyPassword
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.3:6379>
  1. ping 命令

    用于检测 Redis 实例是否在正常工作.

    192.168.100.3:6379> ping
    PONG
  2. setget 命令

    set 命令的用法为——set KEY VALUE,这会将相应的 key-value 写入到 DB 中。get 命令的用法为——get KEY,根据 key 获取相应的 value。使用示例如下所示:

    192.168.100.3:6379> set cityname WuHan
    OK
    192.168.100.3:6379> set city_id 430000
    OK
    192.168.100.3:6379> get cityname
    "WuHan"
    192.168.100.3:6379> get city_id
    "430000"
提示
由于未指定任何数据库,默认情况下将 key-value 保存到 0 号数据库(即 db0)
使用提示
若需要批量写入数据和批量获取 value,请使用 msetmget 命令。
说明
需要注意的是,Redis 当中的字符串和 MySQL 当中的字符(char、varchar)以及 JAVA 当中的字符串(string)还不太一样,这涉及到一个东西——简单动态字符串(SDS,simple dynamic string)。后面我们会展开说明。
  1. select 命令

    前面我们说明配置文件的 GENERAL 部分时,有这样的一个配置参数和值——databases 16。该参数表示配置数据库的数量,值为16,表示从 0 编号的数据库,即 db0、db1…db15。

    select 命令就是用来切换数据库的,用法为——select 数据库编号

    # 比如您需要切换到 10 号数据库,请键入
    ## 当您切换数据库编号后,相应的终端提示符会发生变化
    192.168.100.3:6379> select 10
    OK
    192.168.100.3:6379[10]>
  2. dbsize 命令

    用来获取当前数据库中 key 的数量。

    192.168.100.3:6379[10]> select 0
    OK
    192.168.100.3:6379> dbsize
    (integer) 2
  3. flushdb 命令

    用来清空当前所在库的所有数据,在生产环境下慎用!!!

  4. flushall 命令

    用来清空所有库的所有数据,在生产环境下慎用!!!

    flushdb 命令和 flushall 命令会对生产环境下的数据造成很大影响,一般都会禁用掉。这在前面的《Redis基础篇04 — 客户端连接前的一些基本配置工作》中我们说明过了。

  5. help 命令

    查看命令的帮助信息

    192.168.100.3:6379> help get
    
    GET key
    summary: Returns the string value of a key.
    since: 1.0.0
    group: string
    

    帮助分4行,第一行说明用法;第二行是命令的说明;第三行是命令存在的起始时间;第四行表示命令的分组

  6. quit 命令

    用来退出 Redis 的交互命令行,使用 exit 命令也可以退出。

对 key 的操作命令

Redis 是一个 KV 型的 NoSQL(有些资料也会把 Redis 称为 内存型数据库 或 缓存型数据库),它会将数据全部以 键值对 的形式存储在内存当中,key 与 value 一 一对应,检索 key 就能找到相关的 value。

众所周知,Redis 支持常用的五个 value 数据类型,分别是:

  • strings(字符串)
  • hashes(哈希)
  • lists(列表)
  • sets (集合)
  • sorted set(有序集合)

关于这个数据类型,后面有专门的篇幅介绍。

  1. type 命令

    虽然我们说数据类型针对的是 value ,但是 key 的数据类型与 value 一 一对应,即如果一个 key 的 value 是 string 类型的,则这个 key 也是 string 类型的。我们可以键入 type 命令查看 key 的类型,比如:

    192.168.100.3:6379> type cityname
    string
    192.168.100.3:6379> type city_id
    string
  2. exists 命令

    判断一个或多个 key 是否存在,用法为—— exists KEY1 KEY2 ...。若 1 个 key 存在,则返回 1 ;若 2 个 key 存在,则返回 2,以此类推。

    192.168.100.3:6379> exists cityname city_id
    (integer) 2
  3. del 命令

    删除一个或多个 key,用法为——del KEY1 KEY2 ...。命令执行后,返回被删除的 key 数量,若 key 不存在,则会被忽略。

    192.168.100.3:6379> del cityname city_id  
    (integer) 2

    为了后面演示,重新将数据补上:

    192.168.100.3:6379> set cityname WuHan
    OK
    192.168.100.3:6379> set city_id 430000
    OK
  4. keys 命令

    根据 pattern 查找 key,用法为—— keys pattern。命令执行后返回的结果为数组。pattern 支持一些样式(其实就是 bash 当中的通配符样式,只不过 bash 用来匹配文件名或目录名,而 Redis 当中则是用来匹配 key),比如:

    • keys h?llo // 匹配 hello、hallo 和hxllo
    • keys h*llo // 匹配 hllo 和 heeeello
    • keys h[ae]llo // 匹配 hallo 和 hello ,但是不匹配 hillo
    • keys h[^e]llo // 匹配 hallo、hbllo,但是不匹配 hello
    • keys h[a-c]llo // 匹配 hallo、hbllo、hcllo
    • keys * // 查找当前库中的所有 key

    bash 中常见的通配符:

    通配符样式 作用
    ? 匹配文件名或目录名的一个字符
    * 匹配文件名或目录名的 0 个或多个任意字符
    [ ] 匹配括号中的任何一个字符。例如 [one] 意思是匹配o、n或e
    [-] 匹配括号中给定范围内的任何单个字符。例如 [0-9] 表示匹配从 0 到 9 的任何单个数字
    [^] 单个字符的「逻辑非」匹配。例如 [^a-zA-Z] 表示匹配单个非字母字符。
    192.168.100.3:6379> keys *
    1) "city_id"
    2) "cityname"
注意!
在生产环境下您应该使用 scan 命令作为替代,因为 keys 命令会对 Redis 的性能造成影响,当操作的是一个大型库时,可能会因为阻塞造成服务中断。
  1. rename 命令

    对 key 进行重命名。

    # 当旧的 key 名称不存在时,返回错误
    192.168.100.3:6379> rename city1 city_d
    (error) ERR no such key
    
    # 当对已经存在的 key 进行重命名时,如果新的 key 的名称已经存在于当前库中,则会将其 value 覆盖
    192.168.100.3:6379> get cityname
    "WuHan"
    192.168.100.3:6379> rename city_id cityname
    OK
    192.168.100.3:6379> get cityname
    "430000"
  2. move 命令

    将当前库中的一个 key 移动到另外一个库中。不支持对多个 key 的移动。

    192.168.100.3:6379> move cityname 3
    (integer) 1
    192.168.100.3:6379> select 3
    OK
    192.168.100.3:6379[3]> keys *
    1) "cityname"
    192.168.100.3:6379[3]> move cityname 0
    (integer) 1
  3. expire 命令 和 pexpire 命令

    为 key 设置过期时间(生存时间),到达了过期时间,key就会被自动删除,这时候的 key 状态被称为「易失性」,用法为:

    • expire key 秒数
    • pexpire key 毫秒数
    192.168.100.3:6379> expire city_id 5
    (integer) 1
  4. ttl 命令和 pttl 命令

    查看 key 剩余的生存时间,ttl 执行成功后返回秒数(如果 key 是存在的),pttl 执行后返回毫秒数(如果 key 是存在的)。如果被查看的 key 是不存在的,则返回 -2 ;如果 key 未设置生存时间,返回 -1。

    192.168.100.3:6379> expire cityname 20
    (integer) 1
    192.168.100.3:6379> ttl cityname
    (integer) 15
    192.168.100.3:6379> ttl number
    (integer) -2
  5. persist 命令

    移除 key 的生存时间,将 key 的状态由「易失性」变更为「持久化」。若 key 不存在,返回0;若 key 存在,返回 1

    192.168.100.3:6379> persist stu_class
    (integer) 0
  6. randomkey 命令

    在当前库中返回一个随机 key。有时需要在编程语言中调用 Redis 的 API,用来判断一个库中是否存在数据。

    192.168.100.3:6379> randomkey
  7. scan 命令

    遍历库中的 key。

    192.168.100.3:6379> help scan
    
     SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
     summary: Iterates over the key names in the database.
     since: 2.8.0
     group: generic

    cursor 表示指针或游标,从哪里开始遍历。pattern 表示匹配的模式。COUNT 是可选的,表示每次遍历后返回的 key 数量,默认值为 10,指定了 COUNT 参数的值,并不能保证一定返回相同数量的 key。

    # 写入一些数据
    192.168.100.3:6379> mset stu_name frank city_name GZ level 0 class 7 log_level debug  price 100 number 30 size 100kib file_inode 30698 speed 100Mbps add yes test abcdef port 6379
    OK
    
    192.168.100.3:6379> keys *
     1) "port"
     2) "stu_name"
     3) "level"
     4) "city_name"
     5) "file_inode"
     6) "test"
     7) "log_level"
     8) "class"
     9) "number"
    10)  "add"
    11)  "price"
    12)  "size"
    13)  "speed"

    第一次遍历:使用 0 作为游标并返回 10 个key

    192.168.100.3:6379> scan  0
    1) "3"   // 表示下一次开始遍历时的指针
    2)  1) "level"
        2) "city_name"
        3) "file_inode"
        4) "log_level"
        5) "add"
        6) "price"
        7) "size"
        8) "speed"
        9) "class"
       10)   "number"

    第二次遍历:使用 3 作为游标并返回 3 个 key

    192.168.100.3:6379> scan 3 count 3
    1) "15"
    2) 1) "port"
       2) "stu_name"
       3) "test"

    根据模式筛选 key:

    192.168.100.3:6379> scan  3 match *stu* count 3
    1) "15"
    2) 1) "stu_name"

    使用 scan 有几点需要注意:

    • 在实际的生产环境下,由于 KV 数据是不断 增加/修改/删除 的,因此没办法保证能匹配所有的 key
    • 在实际的生产环境下,由于 KV 数据是不断 增加/修改/删除 的,因此,通过 MATCH 匹配 key 可能会返回相同的 key
    • 指定 COUNT 参数的值,并不能保证一定返回相同数量的 key
    • scan 的初始游标是 0,如果 KV 数据没有被反复的 增加/修改/删除 ,则直到下次使用 scan 再次返回游标 0,表示这是一个完整遍历
    • MATCH 参数值支持的样式与 keys 命令 是相同的,如 ? 、*、[ae]、[^1-9]
  8. touch 命令

    用来修改一个或多个 key 的最后访问时间,将最后的访问时间修改为当前时间。

    192.168.100.3:6379> touch price speed
    (integer) 2
  9. object 命令

    从内部查看你给定 key 的 Redis 对象。用法为——object 子命令 KEY

    子命令可以有:

    • encoding // key 的底层编码
    • freq
    • help
    • idletime // key 的空闲时间,以秒为单位。每次使用 get 或 touch 命令后,空闲时间都会被重新记录
    • refcount // 查看给定 key 被引用的次数
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇