学习入门

学习

入门

Prasan Kumar
作者
Prasan Kumar, Redis 的技术解决方案开发人员
Will Johnston
作者
Will Johnston, Redis 的开发者增长经理

欢迎使用官方 Redis 开发者中心入门指南!

如果您不熟悉 Redis,我们建议您从 Redis 大学 (RU101) 开始。RU101 是一门入门课程,非常适合刚接触 Redis 的开发人员。在本课程中,您将了解 Redis 中的数据结构,并将了解如何在现实世界中实际应用它们。

如果您对 Redis 有任何问题,请加入 Redis Discord 服务器。我们的 Discord 服务器是一个您可以学习、分享和协作关于任何与 Redis 相关事物的场所。与社区和 Redis 大学的用户建立联系。获得您问题的解答并学习酷炫的新技巧和窍门!关注 Redis 和社区的最新内容的通知。并与社区分享您自己的内容。

设置 Redis#

您基本上可以通过两种方式使用 Redis

  • 云 Redis: 托管的无服务器 Redis 数据库即服务 (DBaaS)。通过 Amazon AWS、Google Cloud Platform 或 Microsoft Azure 部署 Redis 云的最快方式。
  • 本地/自建 Redis: 使用您自己的服务器和任何操作系统 (Mac OS、Windows 或 Linux) 自行管理 Redis。

如果您选择使用本地 Redis,我们强烈建议您使用 Docker。如果您选择不使用 Docker,请根据您的操作系统使用以下说明

以下 docker run 命令将 redis-server 公开到端口 6379,将 RedisInsight 公开到端口 8001。您可以通过将浏览器指向 https://localhost:8001 来使用 RedisInsight。

# install
$ docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest

您可以使用 redis-cli 连接到 localhost:6379 上的服务器。如果您没有在本地安装 redis-cli,您可以从 Docker 容器中运行它,如下所示

# connect
$ docker exec -it redis-stack redis-cli

使用 Redis 的基本查询#

  • 使用 CLI 或 RedisInsight (一个用于可视化数据和运行命令的 GUI 工具) 连接到 Redis

RedisInsight

# syntax 1 : connect using host & port, followed by password
$ redis-cli -h host -p port
> AUTH password
OK

# example 1
$ redis-cli -h redis15.localnet.org -p 6390
> AUTH myUnguessablePassword
OK

# syntax 2 : connect using uri
$ redis-cli -u redis://user:password@host:port/dbnum

# example 2
$ redis-cli -u redis://LJenkins:p%40ssw0rd@redis-16379.hosted.com:16379/0
  • 基本的 CLI/RedisInsight 工作台命令
# syntax : Check specific keys
> KEYS pattern

# example
> KEYS *

#------------
# syntax : Check number of keys in database
> DBSIZE

#------------
# syntax : set a key value
> SET key value EX expirySeconds

# example
> SET company redis EX 60

#------------
# syntax : get value by key
> GET key

# example
> GET company

#------------
# syntax : delete keys
> DEL key1 key2 key3 ... keyN

# example
> DEL company

#------------
# syntax : Check if key exists
> EXISTS key1

# example
> EXISTS company

#------------
# syntax : set expiry to key
> EXPIRE key seconds

# example
> EXPIRE lastname 60

#------------
# syntax : remove expiry from key
> PERSIST key

# example
> PERSIST lastname

#------------
# syntax : find (remaining) time to live of a key
> TTL key

# example
> TTL lastname

#------------
# syntax : increment a number
> INCR key

# example
> INCR counter

#------------
# syntax : decrement a number
> DECR key

# example
> DECR counter

详细的 CLI 指示可以查看 此处,并且可以检查命令 此处

使用 Redis 的辅助索引和搜索#

Redis Stack 在 Redis 中启用了 JSON 数据类型。

# syntax : set an object value to a key
> JSON.SET objKey $ value

# example
> JSON.SET person $ '{"name":"Leonard Cohen","dob":1478476800,"isActive": true, "hobbies":["music", "cricket"]}'

#------------
# syntax : get object value of a key
> JSON.GET objKey $

# example
> JSON.GET person $

#------------
# syntax : find object key length
> JSON.OBJLEN objKey $

# example
> JSON.OBJLEN person $

#------------
# syntax : find object keys
> JSON.OBJKEYS objKey $

# example
> JSON.OBJKEYS person $

#------------
# syntax : update nested property
> JSON.SET objKey $.prop value

# example
> JSON.SET person $.name '"Alex"'

#------------
# syntax : update nested array
> JSON.SET objKey $.arrayProp fullValue
> JSON.SET objKey $.arrayProp[index] value

# example
> JSON.SET person $.hobbies '["music", "cricket"]'
> JSON.SET person $.hobbies[1] '"dance"'

#------------
# syntax : remove nested array item by index
> JSON.ARRPOP objKey $.arrayProp index

# example
> JSON.ARRPOP person $.hobbies 1

可以在 Redis Stack 文档 中找到更多详细信息

Redis Stack 为 Redis 提供了一个查询和索引引擎,提供了辅助索引、全文搜索和聚合功能。

  • 我们必须在架构上创建索引,才能搜索其数据
# syntax
> FT.CREATE {index_name} ON JSON PREFIX {count} {prefix} SCHEMA {json_path} AS {attribute} {type}
# NOTE: attribute = logical name,  json_path = JSONPath expressions

# example
> FT.CREATE userIdx ON JSON PREFIX 1 users: SCHEMA $.user.name AS name TEXT $.user.hobbies AS hobbies TAG $.user.age as age NUMERIC
# NOTE: You can search by any attribute mentioned in the above index for keys that start with users: (e.g. users:1).
  • 有关索引 JSON 的更多详细信息,请参见 此处

创建索引后,任何预先存在的/新的/修改后的 JSON 文档都会自动被索引。

//sample json document
{
  "user": {
    "name": "John Smith",
    "hobbies": "foo,bar",
    "age": 23
  }
}
# adding JSON document
> JSON.SET myDoc $ '{"user":{"name":"John Smith","hobbies":"foo,bar","age":23}}'
  • 搜索
# search all user documents with name 'John'
> FT.SEARCH userIdx '@name:(John)'
1) (integer) 1
2) "myDoc"
3) 1) "$"
   2)  {"user":{"name":"John Smith","hobbies":"foo,bar","age":23}}"
  • 搜索并投影所需字段
# search documents with name 'John' & project only age field
> FT.SEARCH userIdx '@name:(John)' RETURN 1 $.user.age
1) (integer) 1
2) "myDoc"
3) 1) "$.user.age"
   2) "23"
# project multiple fields
> FT.SEARCH userIdx '@name:(John)' RETURN 2 $.user.age $.user.name
1) (integer) 1
2) "myDoc"
3) 1) "$.user.age"
   2) "23"
   3) "$.user.name"
   4) "John Smith"

#------------
# project with alias name
> FT.SEARCH userIdx '@name:(John)' RETURN 3 $.user.age AS userAge

1) (integer) 1
2) "myDoc"
3) 1) "userAge"
   2) "23"
#------------

# multi field query
> FT.SEARCH userIdx '@name:(John) @hobbies:{foo | me} @age:[20 30]'
1) (integer) 1
2) "myDoc"
3) 1) "$"
   2)  {"user":{"name":"John Smith","hobbies":"foo,bar","age":23}}"

有关 查询语法 的更多详细信息

  • 删除索引
> FT.DROPINDEX userIdx

有用资源

使用 Redis 的概率数据和查询#

Redis Stack 支持概率数据类型和查询。以下是一个股票排行榜示例

# Reserve a new leaderboard filter
> TOPK.RESERVE trending-stocks 12 50 4 0.9
"OK"

# Add a new entries to the leaderboard
> TOPK.ADD trending-stocks AAPL AMD MSFT INTC GOOG FB NFLX GME AMC TSLA
1) "null" ...

# Get the leaderboard
> TOPK.LIST trending-stocks
1) "AAPL"
2) "AMD"
2) "MSFT" ...

# Get information about the leaderboard
> TOPK.INFO trending-stocks
1) "k"
2) "12"
3) "width"
4) "50"
5) "depth"
6) "4"
7) "decay"
8) "0.90000000000000002"

更多详细信息在 文档

使用 Redis 的时间序列数据和查询#

Redis Stack 支持时间序列用例,例如物联网、股票价格和遥测。您可以以 Redis 的速度摄取和查询数百万个样本和事件。您还可以使用各种查询进行可视化和监控,并内置连接器连接到流行的工具,例如 Grafana、Prometheus 和 Telegraf。

以下示例演示了如何将温度传感器读数存储在 Redis Stack 中

# Create new time-series, for example temperature readings
> TS.CREATE temperature:raw DUPLICATE_POLICY LAST
"OK"

# Create a bucket for monthly aggregation
> TS.CREATE temperature:monthly DUPLICATE_POLICY LAST
"OK"

# Automatically aggregate based on time-weighted average
> TS.CREATERULE temperature:raw temperature:monthly AGGREGATION twa 2629800000
"OK"

# Add data to the raw time-series
> TS.MADD temperature:raw 1621666800000 52 ...
1) "1621666800000" ...

# View the monthly time-weighted average temperatures
> TS.RANGE temperature:monthly 0 +
1) 1) "1621666800000"
   2) "52" ...

# Delete compaction rule
> TS.DELETERULE temperature:raw temperature:monthly
"OK"

# Delete partial time-series
> TS.DEL temperature:raw 0 1621666800000
(integer) 1

更多详细信息在 文档

其他资源#

上次更新于 2024 年 5 月 1 日