Redis 附加功能(一) - 数据库

Redis的数据会被存储到一个名为数据库的容器中。一个Redis服务器可以包含多个数据库,默认情况下,会创建16个数据库。这些数据库用号码进行标志,第一个数据库为0号数据库。

|-----|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 数据库 | 切换到指定的数据库:SELECT index 获取所有与给定匹配符相匹配的键:KEYS pattern 以渐进方式迭代数据库中的键:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] 获取数据库包含的键值对数量:DBSIZE 将给定的键移动到另一个数据库:MOVE key db 清空当前数据库:FLUSHDB [async] 移除所有数据库:FLUSHALL [async] 互换数据库:SWAPDB dbX dbY |
| 键 | 随机返回一个键: RANDOMKEY 对键的值进行排序:SORT key [BY pattern] [LIMIT offset count] [GET pattern GET pattern ...] 检查给定的键是否存在:EXISTS key [key ...] 查看键的类型:TYPE key 修改键名:RENAME | RENAMENX origin new 移除指定的键:DEL key [key ...] 以异步方式移除指定的键:UNLINK |

表 数据库基础命令

1 重点功能

1.1 匹配符

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

|---------|----------------|
| * | 匹配零个或任意多个任意字符。 |
| ? | 匹配任意的单个字符。 |
| [] | 匹配给定字符串中的单个字符。 |
| [?-?] | 匹配给定范围中的单个字符。 |

表 全局匹配符的作用

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

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

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

count: 指定每次迭代期望获取的数量,其并不一定会严格指示返回结果。返回的结果可能大于或小于count 值。

type: 指定需要迭代键的类型。string、hash、list、set、zset、stream。

SCAN的迭代特征:

  1. 迭代会返回两个元素,下一次迭代所需的游标及查找到的键列表。只有当返回的迭代为0才代表迭代结束,否则就算迭代返回的键列表为空,也不一定表示迭代结束。
  2. 从迭代开始到迭代结束,一直存在于数据库中的键总会被返回。
  3. 如果一个键在迭代过程中被添加或删除,那么这个键是否会被返回是不确定的。

1.2.1 数据结构迭代命令

KEYS 会将符号条件的键全部返回给客户端,当数量比较大时,可能会导致服务器被阻塞。因此使用SCAN,逐进方式迭代符号条件的键。

在Redis的散列hash、集合set、及有序集合zset数据结构中,也存在一些可能导致服务器阻塞的命令,例如HKEYS、SMEMBERS、ZRANGE等。这些数据结构也提供了与SCAN命令类似的迭代命令:HSCAN、SSCAN及ZSCAN。

1.3 SORT 对键的值进行排序

SORT key [ALPHA] [BY pattern] [LIMIT offset count] [GET pattern GET pattern ...] [ASC | DESC]

SORT 命令可以对列表、集合或有序集合成员进行排序。

ALPHA:SORT 默认是进行数字值排序的,如果直接对字符串元素进行排序,那么将报错,ALPHA 指定通过字节进行排序。

1.3.1 获取外部键的值作为结果

SORT命令默认返回参与排序的元素值,而GET pattern来指示返回的值,其可以指定多个返回值。pattern参数的值可以是:

  1. 包含*符号的字符串:会把被排序的元素与*符号进行替换,构建出一个键名,然后使用GET命令去获取该键的值。

例:SORT fruits ALPHA GET *-price

图 集合fruits的元素

图 数据库中存储了不同水果价格的字符串键

图 SORT GET pattern 命令执行结果

  1. 包含*符号和->符号的字符串:获取散列中的键值。-> 左边的字符串为散列名(* 只能用在->左边),右边的字符串为字段名。调研HGET命令,从散列中获取指定字段的值。

图 数据库中存储水果信息的散列键

图 SORT 获取散列键值结果

执行步骤,a) 从fruits集合中获取了apple、mango等字符串,并对这些字符串进行字节排序,b)然后用这些字符串替代命令中的-> 左边的*号,构建出键名:apple-info、mango-info 等。 c)最后使用HGET命令获取这些被构建键名散列的inventory的字段值。

  1. 一个单独的#符号:返回被排序的元素本身。

SORT key 等效于 SORT key GET #。 如果单独使用是没意义的,一般只会在同时使用多个GET选项时,才使用GET #。

图 使用多个GET选项

1.3.2 使用外部键的值作为排序权重

在默认情况下,SORT命令将使用被排序元素本身作为排序权重,可以通过BY选项指定其他键的值作为排序的权重。BY 的pattern 与 GET pattern 的使用规则一样。

相关推荐
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU6 小时前
三大范式和E-R图
数据库