
hiett/serverless-redis-httpSRH是一个Redis代理和连接池,使用HTTP而非Redis二进制协议。本项目旨在与Upstash完全兼容,并支持Upstash支持的任何Redis版本。
SRH测试每晚针对@upstash/redis JavaScript包运行。但Upstash的Redis实现与官方Redis代码存在一些细微差异:
UNLINK命令在未提供键时,Upstash不会抛出错误,而Redis/SRH会抛出错误ZRANGE命令中,Upstash无需提供BYSCORE或BYLEX即可使用LIMIT参数,而Redis/SRH若不提供则会抛出错误RedisJSON实现在响应返回方面存在一些细微差异。因此,如果测试使用JSON命令的Upstash实现,不建议将SRH与Redis Stack一起使用。若不使用任何JSON命令,则无影响@upstash/redis SDK使用的body方法管道和事务端点同样已实现,且仅使用body数据。可查看Upstash Rest API文档了解更多。
响应编码也已完全实现,@upstash/redis SDK默认启用该功能。可查看Upstash哈希响应文档了解更多。
@upstash/redis SDK配合使用只需将REST URL和令牌设置为SRH实例的运行地址。例如:
tsimport {Redis} from '@upstash/redis'; export const redis = new Redis({ url: "http://localhost:8079", token: "example_token", });
若本地运行Redis服务器,可启动连接到该服务器的SRH容器。以下示例中,SRH将运行在8080端口:
bashdocker run \ -it -d -p 8080:80 --name srh \ -e SRH_MODE=env \ -e SRH_TOKEN=your_token_here \ -e SRH_CONNECTION_STRING="redis://your_server_here:6379" \ hiett/serverless-redis-http:latest
若需在Kubernetes中运行,以下配置包含基本设置。但请务必阅读配置选项,因为可设置代理多个Redis服务器:
ymlversion: '3' services: redis: image: redis ports: - '6379:6379' serverless-redis-http: ports: - '8079:80' image: hiett/serverless-redis-http:latest environment: SRH_MODE: env SRH_TOKEN: example_token SRH_CONNECTION_STRING: 'redis://redis:6379' # 使用`redis`主机名,因为它们在同一Docker网络中
SRH可在GitHub Actions中作为作业服务的容器运行。只需启动Redis服务器和SRH,无需担心Redis实例未就绪的竞争条件,因为SRH在收到第一个命令时才创建Redis连接:
ymlname: 测试@upstash/redis兼容性 on: push: workflow_dispatch: env: SRH_TOKEN: example_token jobs: container-job: runs-on: ubuntu-latest container: denoland/deno services: redis: image: redis/redis-stack-server:6.2.6-v6 # 6.2是Upstash兼容的Redis版本 srh: image: hiett/serverless-redis-http:latest env: SRH_MODE: env # 使用env模式,因为仅连接一个服务器 SRH_TOKEN: ${{ env.SRH_TOKEN }} SRH_CONNECTION_STRING: redis://redis:6379 steps: - name: 检出代码 uses: actions/checkout@v3 with: repository: upstash/upstash-redis - name: 运行@upstash/redis测试套件 run: deno test -A ./pkg env: UPSTASH_REDIS_REST_URL: [***] UPSTASH_REDIS_REST_TOKEN: ${{ env.SRH_TOKEN }}
SRH支持多个Redis服务器,并可配置任意数量的连接池。闲置15分钟后将关闭未使用的池,收到下一个命令时会重建池。
上述示例使用环境变量指定SRH连接的Redis服务器。也可使用配置JSON文件,创建任意数量的连接,请求中提供的令牌将决定使用哪个池。
创建JSON文件(示例命名为tokens.json):
json{ "example_token": { "srh_id": "some_unique_identifier", "connection_string": "redis://localhost:6379", "max_connections": 3 } }
可在基础对象中添加任意数量的条目,并为每个池配置最大连接数。srh_id用于内部跟踪实例,可设为任意值。
创建文件后,将其挂载到Docker容器的/app/srh-config/tokens.json路径。示例Docker命令:
docker run -it -d -p 8079:80 --name srh --mount type=bind,source=$(pwd)/tokens.json,target=/app/srh-config/tokens.json hiett/serverless-redis-http:latest
| 名称 | 默认值 | 说明 |
|---|---|---|
| SRH_MODE | file | 可选值:env或file。若为file,参见同时连接多个Redis服务器;若为env,需提供以下环境变量 |
| SRH_TOKEN | <SRH_MODE=env时必填> | 设置Rest API所需的令牌 |
| SRH_CONNECTION_STRING | <SRH_MODE=env时必填> | 设置Redis服务器的连接字符串 |
| SRH_MAX_CONNECTIONS | 3 | 仅在SRH_MODE=env时使用 |
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务