conanan's blog conanan's blog
首页
关于
  • 分类
  • 标签
  • 归档
  • Java
  • Java Web
  • 工具

    • Maven
  • MySQL
  • Redis
  • Git
  • Vim
  • Nginx
  • Docker
GitHub

Evan Xu

前端界的小学生
首页
关于
  • 分类
  • 标签
  • 归档
  • Java
  • Java Web
  • 工具

    • Maven
  • MySQL
  • Redis
  • Git
  • Vim
  • Nginx
  • Docker
GitHub
  • 基础

    • 简介
    • string
    • hash
    • list—顺序双向链表
    • set—大量数据
    • sorted_set—排序的大量数据
    • bitmap—位图
    • HyperLogLog
    • GEO—地理坐标
    • stream
    • 通用指令
      • EXIST 是否存在
      • DEL 删除
      • TYPE 类型
      • KEYS 获取所有与给定匹配符相匹配的键
        • 简介
        • 全局匹配符
      • SCAN 以渐进方式迭代数据库中的键
      • RENAME、RENAMENX 修改键名
      • SORT 对键的值进行排序
        • 介绍
        • 字符串排序
        • LIMIT
        • 未完...
      • HELP @GENERIC
      • SELECT 切换至指定的数据库
      • MOVE 将给定的键移动到另一个数据库
      • DBSIZE 获取数据库包含的键值对数量
      • FLUSHDB 清空当前数据库
      • FLUSHALL 清空所有数据库
      • 其他命令
    • Jedis
  • 高级

  • 集群

  • Redis面试
  • Redis
  • 基础
conanan
2021-06-21

通用指令

# 通用指令

# EXIST 是否存在

del key
1

# DEL 删除

exists key
1

# TYPE 类型

type key
1

# KEYS 获取所有与给定匹配符相匹配的键

# 简介

KEYS命令接受一个全局匹配符作为参数,然后返回数据库中所有与这个匹配符相匹配的键作为结果

keys pattern
1
  • 获取数据库包含的所有键

    keys *
    
    1
  • 获取所有以user::为前缀的键

    keys user::*
    
    1
  • 如果数据库中没有任何键与给定的匹配符相匹配,那么KEYS命令将返回一个空值

    127.0.0.1:6379> keys user::*
    (empty array)
    
    1
    2

# 全局匹配符

KEYS命令允许使用多种不同的全局匹配符作为pattern参数的值,如下展示了一些常见的全局匹配符,并举例说明了这些匹配符的作用。或参考 WIKI 、glob程序手册 。

image-20210307215512874

keys *  查询所有
keys it*  查询所有以it开头
keys *heima  查询所有以heima结尾
keys ??heima  查询所有前面两个字符任意,后面以heima结尾
keys user:?  查询所有以user:开头,最后一个字符任意
keys u[st]er:1  查询所有以u开头,以er:1结尾,中间包含一个字母,s或t
1
2
3
4
5
6

# SCAN 以渐进方式迭代数据库中的键

因为KEYS命令需要检查数据库包含的所有键,并一次性将符合条件的所有键全部返回给客户端,所以当数据库包含的键数量比较大时,使用KEYS命令可能会导致服务器被阻塞。为了解决这个问题,Redis从2.8.0版本开始提供SCAN命令,该命令是一个迭代器,它每次被调用的时候都会从数据库中获取一部分键,用户可以通过重复调用SCAN命令来迭代数据库包含的所有键

scan cursor
1
  • cursor参数用于指定迭代时使用的游标,游标记录了迭代的轨迹和进度。在开始一次新的迭代时,用户需要将游标设置为0

SCAN命令的执行结果由两个元素组成

  • 第一个元素是进行下一次迭代所需的游标,如果这个游标为0,那么说明客户端已经对数据库完成了一次完整的迭代。
  • 第二个元素是一个列表,这个列表包含了本次迭代取得的数据库键;如果SCAN命令在某次迭代中没有获取到任何键,那么这个元素将是一个空列表

关于SCAN命令返回的键列表,有两点需要注意

  • SCAN命令可能会返回重复的键,用户如果不想在结果中包含重复的键,那么就需要自己在客户端中进行检测和过滤。
  • SCAN命令返回的键数量是不确定的,有时甚至会不返回任何键,但只要命令返回的游标不为0,迭代就没有结束。

# RENAME、RENAMENX 修改键名

rename key new
1

RENAME命令在执行成功时将返回OK作为结果

127.0.0.1:6379> set name conan
OK
127.0.0.1:6379> get name
"conan"
127.0.0.1:6379> rename name username
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> get username
"conan"
1
2
3
4
5
6
7
8
9
10

注意:

  • 覆盖已存在的键。如果用户指定的新键名已经被占用,那么RENAME命令会先移除占用了新键名的那个键,然后再执行改名操作
  • RENAMENX 只在新键名尚未被占用的情况下进行改名。推荐!如果用户指定的新键名已经被占用,那么RENAMENX将放弃执行改名操作

# SORT 对键的值进行排序

# 介绍

通过执行SORT命令对 list 元素、set 元素或者 sorted_set 成员进行排序。为了让用户能够以不同的方式进行排序,Redis为SORT命令提供了非常多的可选项,如果我们以不给定任何可选项的方式直接调用SORT命令,那么命令将对指定键存储的元素执行数字值排序。默认情况下,SORT命令将按照从小到大的顺序依次返回排序后的各个值

sort key [asc|desc]
1

# 字符串排序

如果我们尝试直接使用SORT命令去对字符串元素进行排序,那么命令将产生一个错误

为了让SORT命令能够对字符串值进行排序,我们必须让SORT命令执行字符串排序操作而不是数字值排序操作,这一点可以通过使用ALPHA选项来实现

sort key alpha
1

# LIMIT

在默认情况下,SORT命令将返回所有被排序的元素,但如果我们只需要其中一部分排序结果,那么可以使用可选的LIMIT选项

sort key [limit offset count]
1

其中offset参数用于指定返回结果之前需要跳过的元素数量,而count参数则用于指定需要获取的元素数量

# 未完...

在默认情况下,SORT命令将返回被排序的元素作为结果,但如果用户有需要,也可以使用GET选项去获取其他值作为排序结果

# HELP @GENERIC

help @generic
help set
1
2

# SELECT 切换至指定的数据库

一个Redis服务器可以包含多个数据库。在默认情况下,Redis服务器在启动时将会创建16个数据库:这些数据库都使用号码进行标识,其中第一个数据库为0号数据库,第二个数据库为1号数据库,而第三个数据库则为2号数据库,以此类推。

Redis虽然不允许在同一个数据库中使用两个同名的键,但是由于不同数据库拥有不同的命名空间,因此在不同数据库中使用同名的键是完全没有问题的,而用户也可以通过使用不同数据库来存储不同的数据,以此来达到重用键名并且减少键冲突的目的。

比如,如果我们将用户的个人信息和会话信息都存放在同一个数据库中,那么为了区分这两种信息,程序就需要使用user::<id>::profile格式的键来存储用户信息,并使用user::<id>::session格式的键来存储用户会话;但如果将这两种信息分别存储在0号数据库和1号数据库中,那么程序就可以在0号数据库中使用user::<id>格式的键来存储用户信息,并在1号数据库中继续使用user::<id>格式的键来存储用户会话。

当用户使用客户端与Redis服务器进行连接时,客户端一般默认都会使用0号数据库,但是通过使用SELECT命令,用户可以从当前正在使用的数据库切换到自己想要使用的数据库

select 0
1

# MOVE 将给定的键移动到另一个数据库

move key db
1

当MOVE命令成功将给定键从当前数据库移动至目标数据库时,命令返回1;

如果给定键并不存在于当前数据库,或者目标数据库中存在与给定键同名的键,那么MOVE命令将不做动作,只返回0表示移动失败。

# DBSIZE 获取数据库包含的键值对数量

# FLUSHDB 清空当前数据库

flushdb [async]
1

FLUSHDB命令会遍历用户正在使用的数据库,移除其中包含的所有键值对,然后返回OK表示数据库已被清空。

与DEL命令一样,FLUSHDB命令也是一个同步移除命令,并且因为FLUSHDB移除的是整个数据库而不是单个键,所以它常常会引发比DEL命令更为严重的服务器阻塞现象

如果用户在调用FLUSHDB命令时使用了async选项,那么实际的数据库清空操作将放在后台线程中以异步方式进行,这样FLUSHDB命令就不会再阻塞服务器了。

# FLUSHALL 清空所有数据库

flushall [async]
1

FLUSHALL命令会遍历服务器包含的所有数据库,并移除其中包含的所有键值对,然后返回OK表示所有数据库均已被清空。

通过指定async选项,FLUSHALL命令将以异步方式在后台线程中执行所有实际的数据库清空操作,因此它将不会再阻塞服务器

# 其他命令

quit
ping --测试服务器是否连通
echo message
1
2
3
编辑
上次更新: 2021/06/21, 15:45:42
stream
Jedis

← stream Jedis→

最近更新
01
线程生命周期
07-06
02
线程安全理论
06-24
03
并发简史
06-24
更多文章>
Theme by Vdoing | Copyright © 2019-2021 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×