查看 Redis 版本号
查看服务端版本1redis-server -v 或 1redis-server --version 例如,使用 redis-server -v 查看 Redis 的版本信息: 12$ redis-server -vRedis server v=7.0.4 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=59659b131c47ab91 输出信息如下: redis-server - 表示这是 Redis 服务器进程 v=7.0.4 - Redis 的版本号,这里是7.0.4版本 sha=00000000:0 - Git SHA 标识,用来标识 Git 中的某个提交 malloc=jemalloc-5.2.1 - Redis 使用的内存分配器,这里是 jemalloc 5.2.1 版本 bits=64 - Redis 编译时使用的位数,这里是 64 位 build=59659b131c47ab91 - Redis 的构建 ID 查看客户端版本1redis-cli -v 或 1redis-cli...
从源代码编译和安装 Redis
我们可以在主流操作系统(包括 Windows、Linux 和 macOS)上从源代码编译和安装 Redis。Redis 除了 C 编译器和 libc 之外没有其他依赖。 Redis可以在以下系统上编译和安装: Linux - 包括 Ubuntu,RedHat,Arch Linux 等发行版。 macOS 其他类 UNIX 系统 - 如 FreeBSD,OpenBSD。 Windows - 需要安装 MinGW 并编译 Windows 版本的 Redis。 要从源代码编译 Redis,需要: 安装 git 并克隆 Redis 最新版本的源代码: 1git clone https://github.com/redis/redis.git Redis 的源文件也可以从官方下载页 [https://redis.io/download] 直接下载获得。可以通过对照 redis-hashes git 仓库中的摘要来验证这些下载文件的完整性。 要从 Redis 下载站点获取最新稳定版 Redis 的源文件,请运行: 1wget...
Redis DECRBY 命令
语法1DECRBY key decrement 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 将存储在 key 的数字值减去 decrement。如果 key 不存在,则先将 key 的值初始化为 0,然后再执行 DECRBY 操作。如果 key 包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。这个操作仅限于 64 位有符号的整数。 返回值返回一个整数,表示执行 DECRBY 操作后,key 对应的值。 示例 1对已存在且其值类型为整数的 key 进行 DECRBY 操作: 12345redis> SET cnt 1000OKredis> DECRBY cnt 1(integer) 999redis> 示例 2对不存在的 key 进行 DECRBY 操作: 1234567redis> EXISTS cnt(integer) 0redis> DECRBY cnt 1(integer) -1redis> GET...
Redis GETDEL 命令
语法1GETDEL key 可用版本 ≥ 6.2.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 获取 key 的值并删除该 key。 如果 key 不存在,则返回 nil。 如果存储在 key 的值不是字符串类型,则返回一个错误。 该命令与 GET 类似,除了它在成功时会删除键(当且仅当键的值类型是字符串时)。 返回值返回 key 的值,如果 key 不存在则返回 nil,如果 key 的值类型不是字符串则返回错误。 示例 1在此示例中演示了 Redis 的 GETDEL 命令同时获取值并删除的效果。 在这个示例中: 首先使用 SET 命令设置 KEY token 的值为 access_token 使用 GET 命令获取 token 的值,返回 access_token 使用 GETDEL 命令获取 token 的值,并删除该 KEY,返回 access_token 再次使用 GET 命令获取 token 的值,由于该 KEY 已被删除,所以返回 nil 123456789redis> SET token...
Redis DECR 命令
语法1DECR key 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @write, @string, @fast 将存储在 key 的数字值减 1。如果 key 不存在,则先将 key 的值初始化为 0,然后再执行 DECR 操作。如果 key 包含一个错误类型的值或包含一个不能表示为整数的字符串,则返回错误。这个操作仅限于 64 位有符号的整数。 返回值返回一个整数,表示执行 DECR 操作后,key 对应的值。 示例 1以下示例演示了当对一个不存在的键执行 DECR 操作时,Redis 会先为该键创建一个初始值为 0 的值,然后再执行减一操作。 使用 EXISTS 命令检查 foo 键是否存在,返回 0,表示键不存在。 然后使用 DECR 命令对 foo 键执行减一操作。由于键不存在,DECR 命令会先为 foo 键创建一个值,并将其设置为 0,然后再对其执行减一操作,使值变为 -1。DECR 返回 -1。 接着使用 GET 命令获取 foo 的值,返回 "-1"。 再次使用 DECR 命令对 foo 执行减一操作,使其值变为...
Redis GET 命令
语法1GET key 可用版本 ≥ 1.0.0 时间复杂度 $O(1)$ ACL 类别 @read, @string, @fast 返回 key 的值,如果 key 不存在时,返回 nil。 如果存储在 key 的值不是字符串类型,则返回一个错误,因为 GET 命令只处理字符串值。 示例 1在此示例中,我们演示了使用 GET 命令获取 foo 键在存在与不存在两种情况下的值。 首先,我们使用 EXISTS 命令检查 foo 键是否存在,返回 0,表示不存在。 然后,我们试图通过 GET 命令获取 foo 的值,由于键不存在,返回 nil。 接着,我们使用 SET 命令给 foo 键设置字符串值 "Rain"。SET 命令返回 OK,表示设置成功。 最后,再次使用 GET 命令获取 foo 的值,这次返回 "Rain"。 123456789redis> EXISTS foo(integer) 0redis> GET foo(nil)redis> SET foo "Rain"OKredis> GET...
Redis APPEND 命令
语法1APPEND key value 可用版本 ≥ 2.0.0 时间复杂度 $O(1)$ 假设附加的值很小,并且已经存在的值是任何大小,摊销后的时间复杂度是O(1),因为Redis使用的动态字符串库会在每次重新分配时将可用空间增加一倍。 如果追加的值比较小,而当前已经存在的值大小任意,那么摊销后的时间复杂度是 $O(1)$,因为 Redis 使用的动态字符串库会在每次重新分配时将可用空间增加一倍。 ACL类别 @write, @string, @fast 如果 key 已经存在并且它的值的数据类型是字符串,APPEND 命令会将 value 追加到该 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。 返回值返回一个整数,表示追加操作后,key 对应值的字符串长度。 示例 1以下例子示范了如何使用 APPEND 命令在 Redis 中追加字符串。 首先,检查 foo 键是否存在,由于返回 0,说明不存在。 然后,执行 APPEND foo "Rain",向...
Presto | 数学运算符和函数
数学运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除(整数除法执行截断运算) % 取模(求余) 数学函数abs(x) → [返回类型与 x 相同]返回 x 的绝对值。 cbrt(x) → double返回 x 的立方根。 ceil(x) → [返回类型与 x 相同]ceiling() 函数的别名。 cosine_similarity(x, y) → double返回稀疏向量 x 和 y 之间的余弦相似度: 1SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])); -- 1.0 degrees(x) → double将以弧度为单位的角度 x 转换为度。 e() → double返回欧拉数 e。 常数 e,作为数学常数,是自然对数函数的底数,亦称自然常数、自然底数,或是欧拉数(Euler’s...
Presto | JSON 函数
is_json_scalar(json) → boolean判断 json 是否为标量(即 JSON 数字、JSON 字符串、true、false 或 null)。 示例 1 1SELECT is_json_scalar(JSON '"aaa"'); 1234 _col0------- true(1 row) 示例 2 1SELECT is_json_scalar(JSON '{"x": 1, "y": 2}'); 1234 _col0------- false(1 row) json_array_contains(json, value) → boolean判断 value 是否存在于 json(一个包含 JSON 数组的字符串)中。 示例 1 判断整数 1 是否包含在 JSON 整数数组 [1, 2, 3] 中: 1SELECT json_array_contains(JSON '[1, 2, 3]', 1); 1234...
Presto | JSON 与支持的数据类型之间相互转换
Presto 支持的各种数据类型的值如何转换为 JSON 格式?Presto 支持将如下基本数据类型的值转换为 JSON 格式: BOOLEAN、TINYINT、SMALLINT、INTEGER、BIGINT、REAL、DOUBLE、VARCHAR。 此外,Presto 同样支持将满足以下条件的数组(ARRAY)、映射(MAP)或行(ROW)转换为 JSON 格式: 数组的元素类型须为上述某一受支持的数据类型; 映射的键类型是 VARCHAR 且值类型须为上述某一受支持的数据类型; 行的每个字段类型均须为上述某一受支持的数据类型。 示例 例 1 NULL 将换为 JSON: 1SELECT CAST(NULL AS JSON); 1234 _col0------- NULL(1 row) 例 2 INTEGER 将换为 JSON: 1SELECT CAST(1 AS JSON); 1234 _col0------- 1(1 row) 例 3 BIGINT 将换为 JSON: 1SELECT CAST(9223372036854775807 AS JSON); 1234 ...
Presto | 三角函数
Presto 提供了一组三角函数,它们的参数类型为弧度,函数的返回类型都是 DOUBLE。如果想在弧度和度之间进行转换,可以使用 radians(x) 和 degrees(x) 这两个转换函数。 具体的三角函数如下表: 函数 说明 sin(x) x 的正弦 cos(x) x 的余弦 tan(x) x 的正切 asin(x) x 的反正弦 acos(x) x 的反余弦 atan(x) x 的反正切 atan2(y, x) y/x 的反正切 cosh(x) x 的双曲余弦 tanh(x) x 的双曲正切 弧度制是指用弧长与半径之比度量对应圆心角角度的方式。用符号 rad 表示,读作弧度。 用比较通俗的说法,弧度是度的另一种表达方式。一整圆等于 2π 弧度,也就是 360 度。弧度制采用弧长对半径的比率来表达角度的大小,这使得许多与圆和角有关的计算更加简便。比如,设半径为 1 的圆,角 AOB 的大小为 60 度。这相当于圆周的 1/6,也就是 π/3 弧度。因为圆的周长是 2πr,这里 r=1,所以周长是 2π。60...
Presto | 数据类型
Presto 有一套内置的数据类型,如下所述。其他类型可以由插件提供。 注意:连接器不需要支持所有类型。有关支持类型的详细信息,请参阅连接器文档。 Boolean 布尔型BOOLEAN 此类型表示布尔值 true 和 false。 Integer 整数TINYINT 存储空间为 8 位的有符号整数,可以存储的值的范围从 $-2^{(8-1)}$ 到 $2^{(8-1)}-1$,即最小值为 -128,最大值为 127。 SMALLINT 存储空间为 16 位的有符号整数,可以存储的值的范围从 $-2^{(16-1)}$ 到 $2^{(16-1)}-1$,即最小值为 -32768,最大值为 32767。 INTEGER 存储空间为 32 位的有符号整数,可以存储的值的范围从 $-2^{(32-1)}$ 到 $2^{(32-1)}-1$,即最小值为 -2147483648,最大值为2147483647。 INT 名称也可用于此类型。 BIGINT 存储空间为 64 位的有符号整数,可以存储的值的范围从 $-2^{(64-1)}$ 到 $2^{(64-1)}-1$,即最小值为...
Presto | 保留关键字
Presto 保留了一些关键词。如果你想将这些关键词直接用作字段名,请使用双引号 " 将其包裹。 例如: 12"VALUES""GROUP" 以下是 Presto...
Presto | 概述
Presto 是一个分布式 SQL 查询引擎,专为查询大数据而设计。它可以在一个或多个异构的数据源上查询大数据集。 别误解,Presto 不是数据库尽管 Presto 被许多社区成员称为数据库,但我们必须明确 Presto 的定位。 Presto 理解 SQL,但并不提供标准数据库的全部功能。 Presto 不是通用的关系型数据库,也不是 MySQL、PostgreSQL 或 Oracle 等数据库的替代品。 Presto 的设计目的也不是在线事务处理(OLTP)。这一点也适用于许多其他为数据仓库或分析优化的数据库。 简而言之,Presto 的重点在于使用大数据环境提供快速的交互式数据分析和报告。如果你需要事务支持、持久化存储或 OLTP 工作负载的支持,Presto 可能不满足你的需求。 Presto 角色Presto 提供一种分布式查询方式来高效查询和分析大数据。它专注于低延迟的交互式分析查询而非事务处理。 Presto 是一款利用分布式查询高效查询大数据的工具。如果你处理 TB 级或 PB 级的数据,您很可能使用与 Hadoop 和 HDFS 交互的工具。Presto...
Python 编程指南 | 如何判断字典中是否存在某个键
为确认字典中是否存在指定键,可以利用 in 关键字进行检查: 123456789101112131415#!/usr/bin/env python3# -*- coding: utf-8 -*-info_dict = { "tag_id": "wweFrrBgAAxQzRImZoVcxBqc9YEqkEsg", "user_id": "etvFrrBgAAKNCEAA4cEGXQFeo_vGyI2Q", "year": 2023}if "tag_id" in info_dict: print("键 'tag_id' 存在于 info_dict 字典中。")else: print("字典 info_dict 中不存在键 'tag_id'。")# 输出结果:# 键 'tag_id' 存在于 info_dict...
Presto | 转换函数
Presto 可以隐式地将数字和字符值转换为适当的数据类型,前提是这种转换是可行的。然而,Presto 不会在字符类型和数字类型间隐式转换。例如,一个期望获得 varchar 类型结果的查询不会自动将 bigint 类型的值转换为对应的 varchar 类型。 如果有需要,值可以通过显式转换来变换为特定的数据类型。 转换函数cast(value AS type) → type 可以通过显式转换将一个值变换为特定的数据类型。这可以用于将 varchar 类型的值转换为数字类型,反之也可以。 try_cast(value AS type) → type 与 cast() 函数相似,不同之处在于如果转换失败,它会返回 null 值。 数据大小parse_presto_data_size(string) 可以将格式为 value unit 的字符串解析为一个数字,其中: value 为小数,表示 unit 值的数值部分; unit 为数据大小的单位,如B、KB、MB、GB等。 parse_presto_data_size...
Presto | 比较运算符和函数
比较运算符 运算符 描述 < 小于 > 大于 <= 小于等于 >= 大于等于 = 等于 <> 不等于 != 不等于(非标准但常用的语法) 范围运算符:BETWEENBETWEEN 运算符用于判断一个值是否在指定范围内。它使用如下语法: 1value BETWEEN min AND max 例如: 1SELECT 3 BETWEEN 2 AND 6; -- true 以上的语句等效于: 1SELECT 3 >= 2 AND 3 <= 6; -- true 要判断一个值是否不在指定范围内,则使用 NOT BETWEEN: 1SELECT 3 NOT BETWEEN 2 AND 6; -- false 上述语句与以下语句等效: 1SELECT 3 < 2 OR 3 > 6; -- false 在 BETWEEN 或 NOT BETWEEN 语句中出现 NULL 将导致语句计算结果为 NULL: 123SELECT NULL BETWEEN 2 AND 4; --...
Presto | 逻辑运算符
逻辑运算符 运算符 描述 示例 AND 当运算符 AND 两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。 a AND b OR 当运算符 OR 两边的表达式的结果只要有一个为 true 时,整个运算结果为 true;两边的表达式的结果均为 false,则结果为 false。 a OR b NOT 如果布尔值为 false 返回 true;如果布尔值为 true 返回 false。 NOT a NULL 值对逻辑运算符的影响如果表达式的一边或两边是 NULL,那么 AND 运算符的结果可能是 NULL。如果 AND 运算符至少有一边是 FALSE,那么表达式的结果为 FALSE: 12345SELECT CAST(null AS boolean) AND true; -- nullSELECT CAST(null AS boolean) AND false; -- falseSELECT CAST(null AS boolean) AND CAST(null AS...
Presto | TRY 函数
语法try(expression) 在计算表达式 expression 时,如果发生某些类型的错误,则返回 NULL 而不是抛出异常。 作用TRY 函数的作用是在计算一个表达式,如果在计算过程中发生错误,则返回空值 NULL。这在以下两种场景下非常有用: 查询结果中含有非法或无效数据,但你希望返回空值而不是报错。 为表达式指定一个默认值,在计算失败时返回这个默认值。 为实现第二个目的,可以将 TRY 函数与 COALESCE 函数结合使用。COALESCE 函数的作用是返回一系列值中的第一个非空值。所以通过以下方式可以为 TRY 函数指定默认值: 1COALESCE(TRY(expr1), default_value) 如果 TRY 函数成功计算 expr1 并返回一个值(非 NULL),COALESCE 函数会返回该值。但如果TRY 函数返回空值 NULL,COALESCE 函数就会返回我们指定的 default_value 默认值。 TRY 函数可以处理以下错误: 除数为 0 无效的类型转换参数或无效的函数参数 数值超出范围 例如: 12SELECT...
Presto | 条件表达式
CASE标准 SQL 的 CASE 表达式有两种形式。 “简单” CASE 表达式的语法如下: 12345CASE expression WHEN value THEN result [ WHEN ... ] [ ELSE result ]END 它会从左到右逐个检查每个值表达式 value,直到找到与条件表达式 expression 相等的表达式为止。然后返回相应的 result 表达式。如果未找到匹配的表达式,则返回 ELSE 子句中的 result 表达式(如果有的话),否则返回 null。 例如: 123456SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'many' END “搜索”形式的 CASE 表达式允许使用任意布尔条件判断结果表达式。其语法如下: 12345CASE WHEN condition THEN result ...