全部产品
云市场

SQL for Redis

更新时间:2019-05-29 21:26:31

操作步骤

创建按钮

6

7

3. 执行Redis SQL

8

SQL语法

在跨库查询SQL中,访问所有数据库类型的SQL语法都是一样的,所以参考SQL语法即可。

DBLink与Redis的关系

DBLink与Redis的关系

Redis的默认表

跨库SQL中,我们默认为每个Redis实例创建了固定的6张表,表名分别为:

  • string, 值为string类型的数据组成的表。
  • list,值为list类型的数据组成的表。
  • set,值为set类型的数据组成的表。
  • zset,值为sorted set类型的数据组成的表。
  • hash,值为hash类型的数据组成的表。
  • all,所有类型数据组成的表,可看作上述5张表的并集

1

Redis的表结构

6种表的表结构是一致的,见下表:

列名 类型 说明
key varchar redis的key
index varchar 当数据是string/set类型时,这个字段没有太大意义;当数据是list/zset时,该字段表示该数据类型的下标;当数据是hash类型时,该字段表示hash数据内的key值。
value varchar 对应数据类型的value值
score double 表示SortedSet的分值,其他数据类型为null
expire_time bigint 跟redis的ttl命令一致,表示数据离过期的剩余秒数
data_type varchar 数据类型

2

支持的Redis范围

  • 版本v2.8+
  • 支持云上所有版本Redis(标准版、读写分离版、集群版)
  • 自建的Redis版本,只支持开源单机版本

使用技巧

  • 避免”select *”,expire_time列去掉会更快:
    1. select * from `dblink_redis`.`db0`.`string`;
    2. =>
    3. select key, value from `dblink_redis`.`db0`.`string`;
  • 确定key的情况下,添加where key = ‘XXX’,避免scan:
    1. select key, value from `dblink_redis`.`db0`.`string` where key = 'hello redis';
  • 假设redis用有个hash类型的key为score_map,存放着学生的id与分数的映射。另外mysql中有student的元信息表,假设这里有id和姓名name。那么可以通过以下SQL关联查询:
    1. SELECT student.id, student.name, score.value FROM
    2. (SELECT id, name FROM `mysql_test`.`gg`.`student`) as student
    3. JOIN
    4. (SELECT index, value FROM `redis`.`db0`.`all` where key = 'score_map') as score
    5. ON
    6. student.id = score.index;

4