| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>Pegasus | Scala Client</title> |
| <link rel="stylesheet" href="/zh/assets/css/app.css"> |
| <link rel="shortcut icon" href="/zh/assets/images/favicon.ico"> |
| <link rel="stylesheet" href="/zh/assets/css/utilities.min.css"> |
| <link rel="stylesheet" href="/zh/assets/css/docsearch.v3.css"> |
| <script src="/assets/js/jquery.min.js"></script> |
| <script src="/assets/js/all.min.js"></script> |
| <script src="/assets/js/docsearch.v3.js"></script> |
| <!-- Begin Jekyll SEO tag v2.8.0 --> |
| <title>Scala Client | Pegasus</title> |
| <meta name="generator" content="Jekyll v4.3.3" /> |
| <meta property="og:title" content="Scala Client" /> |
| <meta property="og:locale" content="en_US" /> |
| <meta name="description" content="获取客户端 项目地址:Pegasus scala client 下载: git clone git@github.com:apache/incubator-pegasus.git cd incubator-pegasus/scala-client 选择所使用的版本并构建,建议使用master版本。同时注意,scala客户端构建依赖Java客户端,请参考获取Java客户端在项目中添加Java依赖。你可以打包成Jar包进行使用: sbt package 或者,安装到本地的sbt repository,方便在sbt项目中使用: sbt publish-local 或者,安装到本地的maven repository: sbt publish-m2 项目默认使用scala-2.11进行构建,打包发布时则同时发布2.11版本(pegasus-scala-client_2.11)和2.12版本(pegasus-scala-client_2.12),如果你的项目使用sbt构建,则可配置为: //使用sbt仓库,不需要添加后缀,默认使用当前scala版本号,即使用2.12 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" %% "pegasus-scala-client" % "1.11.4-1-SNAPSHOT" ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" % "pegasus-scala-client_2.11" % "1.11.4-1-SNAPSHOT" ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: <dependency> <groupId>com.xiaomi.infra</groupId> <artifactId>pegasus-scala-client_2.11</artifactId> <version>1.11.4-1</version> </dependency> 使用客户端" /> |
| <meta property="og:description" content="获取客户端 项目地址:Pegasus scala client 下载: git clone git@github.com:apache/incubator-pegasus.git cd incubator-pegasus/scala-client 选择所使用的版本并构建,建议使用master版本。同时注意,scala客户端构建依赖Java客户端,请参考获取Java客户端在项目中添加Java依赖。你可以打包成Jar包进行使用: sbt package 或者,安装到本地的sbt repository,方便在sbt项目中使用: sbt publish-local 或者,安装到本地的maven repository: sbt publish-m2 项目默认使用scala-2.11进行构建,打包发布时则同时发布2.11版本(pegasus-scala-client_2.11)和2.12版本(pegasus-scala-client_2.12),如果你的项目使用sbt构建,则可配置为: //使用sbt仓库,不需要添加后缀,默认使用当前scala版本号,即使用2.12 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" %% "pegasus-scala-client" % "1.11.4-1-SNAPSHOT" ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" % "pegasus-scala-client_2.11" % "1.11.4-1-SNAPSHOT" ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: <dependency> <groupId>com.xiaomi.infra</groupId> <artifactId>pegasus-scala-client_2.11</artifactId> <version>1.11.4-1</version> </dependency> 使用客户端" /> |
| <meta property="og:site_name" content="Pegasus" /> |
| <meta property="og:type" content="article" /> |
| <meta property="article:published_time" content="2024-04-22T06:39:52+00:00" /> |
| <meta name="twitter:card" content="summary" /> |
| <meta property="twitter:title" content="Scala Client" /> |
| <script type="application/ld+json"> |
| {"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2024-04-22T06:39:52+00:00","datePublished":"2024-04-22T06:39:52+00:00","description":"获取客户端 项目地址:Pegasus scala client 下载: git clone git@github.com:apache/incubator-pegasus.git cd incubator-pegasus/scala-client 选择所使用的版本并构建,建议使用master版本。同时注意,scala客户端构建依赖Java客户端,请参考获取Java客户端在项目中添加Java依赖。你可以打包成Jar包进行使用: sbt package 或者,安装到本地的sbt repository,方便在sbt项目中使用: sbt publish-local 或者,安装到本地的maven repository: sbt publish-m2 项目默认使用scala-2.11进行构建,打包发布时则同时发布2.11版本(pegasus-scala-client_2.11)和2.12版本(pegasus-scala-client_2.12),如果你的项目使用sbt构建,则可配置为: //使用sbt仓库,不需要添加后缀,默认使用当前scala版本号,即使用2.12 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" %% "pegasus-scala-client" % "1.11.4-1-SNAPSHOT" ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := "2.12.8" libraryDependencies ++= Seq( "com.xiaomi.infra" % "pegasus-scala-client_2.11" % "1.11.4-1-SNAPSHOT" ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: <dependency> <groupId>com.xiaomi.infra</groupId> <artifactId>pegasus-scala-client_2.11</artifactId> <version>1.11.4-1</version> </dependency> 使用客户端","headline":"Scala Client","mainEntityOfPage":{"@type":"WebPage","@id":"/clients/scala-client"},"url":"/clients/scala-client"}</script> |
| <!-- End Jekyll SEO tag --> |
| </head> |
| |
| |
| <body> |
| <div class="dashboard is-full-height"> |
| <!-- left panel --> |
| <div class="dashboard-panel is-medium is-hidden-mobile pl-0"> |
| <div class="dashboard-panel-header has-text-centered"> |
| <a href="/zh/"> |
| <img src="/assets/images/pegasus-logo-inv.png" style="width: 80%;"> |
| </a> |
| |
| </div> |
| <div class="dashboard-panel-main is-scrollable pl-6"> |
| |
| |
| <aside class="menu"> |
| |
| <p class="menu-label">Pegasus 产品文档</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/docs/downloads" |
| class=""> |
| 下载 |
| </a> |
| </li> |
| |
| </ul> |
| |
| <p class="menu-label">编译构建</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/docs/build/compile-by-docker" |
| class=""> |
| 使用 Docker 完成编译(推荐) |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/docs/build/compile-from-source" |
| class=""> |
| 从源码编译 |
| </a> |
| </li> |
| |
| </ul> |
| |
| <p class="menu-label">客户端库</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/clients/java-client" |
| class=""> |
| Java 客户端 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/clients/cpp-client" |
| class=""> |
| C++ 客户端 |
| </a> |
| </li> |
| |
| <li> |
| <a href="https://github.com/apache/incubator-pegasus/tree/master/go-client" |
| class=""> |
| Golang 客户端 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/clients/python-client" |
| class=""> |
| Python 客户端 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/clients/node-client" |
| class=""> |
| NodeJS 客户端 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/clients/scala-client" |
| class="is-active"> |
| Scala 客户端 |
| </a> |
| </li> |
| |
| </ul> |
| |
| <p class="menu-label">生态工具</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/docs/tools/shell" |
| class=""> |
| Pegasus Shell 工具 |
| </a> |
| </li> |
| |
| <li> |
| <a href="https://github.com/pegasus-kv/admin-cli" |
| class=""> |
| 集群管理命令行 |
| </a> |
| </li> |
| |
| <li> |
| <a href="https://github.com/pegasus-kv/pegic" |
| class=""> |
| 数据访问命令行 |
| </a> |
| </li> |
| |
| </ul> |
| |
| <p class="menu-label">用户接口</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/api/ttl" |
| class=""> |
| TTL |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/api/single-atomic" |
| class=""> |
| 单行原子操作 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/api/redis" |
| class=""> |
| Redis 适配 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/api/geo" |
| class=""> |
| GEO 支持 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/api/http" |
| class=""> |
| HTTP 接口 |
| </a> |
| </li> |
| |
| </ul> |
| |
| <p class="menu-label">高效运维</p> |
| <ul class="menu-list"> |
| |
| <li> |
| <a href="/zh/administration/deployment" |
| class=""> |
| 集群部署 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/config" |
| class=""> |
| 配置说明 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/rebalance" |
| class=""> |
| 负载均衡 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/monitoring" |
| class=""> |
| 可视化监控 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/rolling-update" |
| class=""> |
| 集群重启和升级 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/scale-in-out" |
| class=""> |
| 集群扩容缩容 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/resource-management" |
| class=""> |
| 资源管理 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/cold-backup" |
| class=""> |
| 冷备份 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/meta-recovery" |
| class=""> |
| 元数据恢复 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/replica-recovery" |
| class=""> |
| Replica 数据恢复 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/zk-migration" |
| class=""> |
| Zookeeper 迁移 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/table-migration" |
| class=""> |
| Table 迁移 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/table-soft-delete" |
| class=""> |
| Table 软删除 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/table-env" |
| class=""> |
| Table 环境变量 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/remote-commands" |
| class=""> |
| 远程命令 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/partition-split" |
| class=""> |
| Partition-Split |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/duplication" |
| class=""> |
| 跨机房同步 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/compression" |
| class=""> |
| 数据压缩 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/throttling" |
| class=""> |
| 流量控制 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/experiences" |
| class=""> |
| 运维经验 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/manual-compact" |
| class=""> |
| Manual Compact 功能 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/usage-scenario" |
| class=""> |
| Usage Scenario 功能 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/bad-disk" |
| class=""> |
| 坏盘检修 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/whitelist" |
| class=""> |
| Replica Server 白名单 |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/backup-request" |
| class=""> |
| Backup Request |
| </a> |
| </li> |
| |
| <li> |
| <a href="/zh/administration/hotspot-detection" |
| class=""> |
| 热点检测 |
| </a> |
| </li> |
| |
| </ul> |
| |
| </aside> |
| </div> |
| </div> |
| |
| <!-- main section --> |
| <div class="dashboard-main is-scrollable"> |
| <nav class="navbar is-hidden-desktop"> |
| <div class="navbar-brand"> |
| <a href="/zh/" class="navbar-item"> |
| <!-- Pegasus Icon --> |
| <img src="/assets/images/pegasus-square.png"> |
| </a> |
| <div class="navbar-item"> |
| |
| |
| <!--A simple language switch button that only supports zh and en.--> |
| <!--IF its language is zh, then switches to en.--> |
| |
| <!--If you don't want a url to be relativized, you can add a space explicitly into the href to |
| prevents a url from being relativized by polyglot.--> |
| <a class="button is-light is-outlined is-inverted" href=" /clients/scala-client"><strong>En</strong></a> |
| |
| </div> |
| <a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu"> |
| <!-- Appears in mobile mode only --> |
| <span aria-hidden="true"></span> |
| <span aria-hidden="true"></span> |
| <span aria-hidden="true"></span> |
| </a> |
| </div> |
| <div class="navbar-menu" id="navMenu"> |
| <div class="navbar-end"> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| Pegasus 产品文档 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/docs/downloads" |
| class="navbar-item "> |
| 下载 |
| </a> |
| |
| </div> |
| </div> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| 编译构建 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/docs/build/compile-by-docker" |
| class="navbar-item "> |
| 使用 Docker 完成编译(推荐) |
| </a> |
| |
| <a href="/zh/docs/build/compile-from-source" |
| class="navbar-item "> |
| 从源码编译 |
| </a> |
| |
| </div> |
| </div> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| 客户端库 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/clients/java-client" |
| class="navbar-item "> |
| Java 客户端 |
| </a> |
| |
| <a href="/zh/clients/cpp-client" |
| class="navbar-item "> |
| C++ 客户端 |
| </a> |
| |
| <a href="https://github.com/apache/incubator-pegasus/tree/master/go-client" |
| class="navbar-item "> |
| Golang 客户端 |
| </a> |
| |
| <a href="/zh/clients/python-client" |
| class="navbar-item "> |
| Python 客户端 |
| </a> |
| |
| <a href="/zh/clients/node-client" |
| class="navbar-item "> |
| NodeJS 客户端 |
| </a> |
| |
| <a href="/zh/clients/scala-client" |
| class="navbar-item is-active"> |
| Scala 客户端 |
| </a> |
| |
| </div> |
| </div> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| 生态工具 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/docs/tools/shell" |
| class="navbar-item "> |
| Pegasus Shell 工具 |
| </a> |
| |
| <a href="https://github.com/pegasus-kv/admin-cli" |
| class="navbar-item "> |
| 集群管理命令行 |
| </a> |
| |
| <a href="https://github.com/pegasus-kv/pegic" |
| class="navbar-item "> |
| 数据访问命令行 |
| </a> |
| |
| </div> |
| </div> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| 用户接口 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/api/ttl" |
| class="navbar-item "> |
| TTL |
| </a> |
| |
| <a href="/zh/api/single-atomic" |
| class="navbar-item "> |
| 单行原子操作 |
| </a> |
| |
| <a href="/zh/api/redis" |
| class="navbar-item "> |
| Redis 适配 |
| </a> |
| |
| <a href="/zh/api/geo" |
| class="navbar-item "> |
| GEO 支持 |
| </a> |
| |
| <a href="/zh/api/http" |
| class="navbar-item "> |
| HTTP 接口 |
| </a> |
| |
| </div> |
| </div> |
| |
| <!--dropdown--> |
| <div class="navbar-item has-dropdown is-hoverable"> |
| <a href="" |
| class="navbar-link "> |
| <span> |
| 高效运维 |
| </span> |
| </a> |
| <div class="navbar-dropdown"> |
| |
| <a href="/zh/administration/deployment" |
| class="navbar-item "> |
| 集群部署 |
| </a> |
| |
| <a href="/zh/administration/config" |
| class="navbar-item "> |
| 配置说明 |
| </a> |
| |
| <a href="/zh/administration/rebalance" |
| class="navbar-item "> |
| 负载均衡 |
| </a> |
| |
| <a href="/zh/administration/monitoring" |
| class="navbar-item "> |
| 可视化监控 |
| </a> |
| |
| <a href="/zh/administration/rolling-update" |
| class="navbar-item "> |
| 集群重启和升级 |
| </a> |
| |
| <a href="/zh/administration/scale-in-out" |
| class="navbar-item "> |
| 集群扩容缩容 |
| </a> |
| |
| <a href="/zh/administration/resource-management" |
| class="navbar-item "> |
| 资源管理 |
| </a> |
| |
| <a href="/zh/administration/cold-backup" |
| class="navbar-item "> |
| 冷备份 |
| </a> |
| |
| <a href="/zh/administration/meta-recovery" |
| class="navbar-item "> |
| 元数据恢复 |
| </a> |
| |
| <a href="/zh/administration/replica-recovery" |
| class="navbar-item "> |
| Replica 数据恢复 |
| </a> |
| |
| <a href="/zh/administration/zk-migration" |
| class="navbar-item "> |
| Zookeeper 迁移 |
| </a> |
| |
| <a href="/zh/administration/table-migration" |
| class="navbar-item "> |
| Table 迁移 |
| </a> |
| |
| <a href="/zh/administration/table-soft-delete" |
| class="navbar-item "> |
| Table 软删除 |
| </a> |
| |
| <a href="/zh/administration/table-env" |
| class="navbar-item "> |
| Table 环境变量 |
| </a> |
| |
| <a href="/zh/administration/remote-commands" |
| class="navbar-item "> |
| 远程命令 |
| </a> |
| |
| <a href="/zh/administration/partition-split" |
| class="navbar-item "> |
| Partition-Split |
| </a> |
| |
| <a href="/zh/administration/duplication" |
| class="navbar-item "> |
| 跨机房同步 |
| </a> |
| |
| <a href="/zh/administration/compression" |
| class="navbar-item "> |
| 数据压缩 |
| </a> |
| |
| <a href="/zh/administration/throttling" |
| class="navbar-item "> |
| 流量控制 |
| </a> |
| |
| <a href="/zh/administration/experiences" |
| class="navbar-item "> |
| 运维经验 |
| </a> |
| |
| <a href="/zh/administration/manual-compact" |
| class="navbar-item "> |
| Manual Compact 功能 |
| </a> |
| |
| <a href="/zh/administration/usage-scenario" |
| class="navbar-item "> |
| Usage Scenario 功能 |
| </a> |
| |
| <a href="/zh/administration/bad-disk" |
| class="navbar-item "> |
| 坏盘检修 |
| </a> |
| |
| <a href="/zh/administration/whitelist" |
| class="navbar-item "> |
| Replica Server 白名单 |
| </a> |
| |
| <a href="/zh/administration/backup-request" |
| class="navbar-item "> |
| Backup Request |
| </a> |
| |
| <a href="/zh/administration/hotspot-detection" |
| class="navbar-item "> |
| 热点检测 |
| </a> |
| |
| </div> |
| </div> |
| |
| </div> |
| </div> |
| </nav> |
| |
| <nav class="navbar is-hidden-mobile"> |
| <div class="navbar-start w-full"> |
| <div class="navbar-item pl-0 w-full"> |
| <!--TODO(wutao): Given the limitation of docsearch that couldn't handle multiple input, |
| I make searchbox only shown in desktop. Fix this issue when docsearch.js v3 released. |
| Related issue: https://github.com/algolia/docsearch/issues/230--> |
| <div id="docsearch"></div> |
| </div> |
| </div> |
| <div class="navbar-end"> |
| <div class="navbar-item"> |
| |
| |
| <!--A simple language switch button that only supports zh and en.--> |
| <!--IF its language is zh, then switches to en.--> |
| |
| <!--If you don't want a url to be relativized, you can add a space explicitly into the href to |
| prevents a url from being relativized by polyglot.--> |
| <a class="button is-light is-outlined is-inverted" href=" /clients/scala-client"><strong>En</strong></a> |
| |
| </div> |
| </div> |
| </nav> |
| |
| <section class="hero is-info lg:mr-3"> |
| <div class="hero-body"> |
| |
| <p class="title is-size-2 is-centered">Scala 客户端</p> |
| </div> |
| </section> |
| <section class="section" style="padding-top: 2rem;"> |
| <div class="content"> |
| <h1 id="获取客户端">获取客户端</h1> |
| <p>项目地址:<a href="https://github.com/apache/incubator-pegasus/tree/master/scala-client">Pegasus scala client</a> |
| 下载:</p> |
| <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone git@github.com:apache/incubator-pegasus.git |
| <span class="nb">cd </span>incubator-pegasus/scala-client |
| </code></pre></div></div> |
| <p>选择所使用的版本并构建,建议使用master版本。同时注意,scala客户端构建依赖<a href="https://github.com/apache/incubator-pegasus/tree/master/java-client">Java客户端</a>,请参考<a href="/zh/clients/java-client#获取java客户端">获取Java客户端</a>在项目中添加Java依赖。你可以打包成Jar包进行使用:</p> |
| <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sbt package |
| </code></pre></div></div> |
| <p>或者,安装到本地的sbt repository,方便在sbt项目中使用:</p> |
| <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sbt publish-local |
| </code></pre></div></div> |
| <p>或者,安装到本地的maven repository:</p> |
| <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sbt publish-m2 |
| </code></pre></div></div> |
| <p>项目默认使用scala-2.11进行构建,打包发布时则同时发布2.11版本(pegasus-scala-client_2.11)和2.12版本(pegasus-scala-client_2.12),如果你的项目使用sbt构建,则可配置为:</p> |
| <pre><code class="language-sbt">//使用sbt仓库,不需要添加后缀,默认使用当前scala版本号,即使用2.12 |
| scalaVersion := "2.12.8" |
| libraryDependencies ++= Seq( |
| "com.xiaomi.infra" %% "pegasus-scala-client" % "1.11.4-1-SNAPSHOT" |
| ) |
| </code></pre> |
| <p>或者配置为:</p> |
| <pre><code class="language-sbt">//使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 |
| scalaVersion := "2.12.8" |
| libraryDependencies ++= Seq( |
| "com.xiaomi.infra" % "pegasus-scala-client_2.11" % "1.11.4-1-SNAPSHOT" |
| ) |
| </code></pre> |
| <p>如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如:</p> |
| <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><dependency></span> |
| <span class="nt"><groupId></span>com.xiaomi.infra<span class="nt"></groupId></span> |
| <span class="nt"><artifactId></span>pegasus-scala-client_2.11<span class="nt"></artifactId></span> |
| <span class="nt"><version></span>1.11.4-1<span class="nt"></version></span> |
| <span class="nt"></dependency></span> |
| </code></pre></div></div> |
| <h1 id="使用客户端">使用客户端</h1> |
| |
| <h2 id="获取实例">获取实例</h2> |
| <p>通过指定server配置信息获取实例,Scala提供两种获取实例的接口:<br /> |
| <strong>1、文件路径作为配置参数:</strong> 参见<a href="/zh/clients/java-client#配置文件">Java客户端文件配置</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">createClient</span><span class="o">(</span><span class="n">configPath</span><span class="k">:</span> <span class="kt">String</span><span class="o">)</span><span class="k">:</span> <span class="kt">ScalaPegasusClient</span> |
| </code></pre></div></div> |
| <p>例如:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">val</span> <span class="nv">pegasusClient</span> <span class="k">=</span> <span class="nv">ScalaPegasusClientFactory</span><span class="o">.</span><span class="py">createClient</span><span class="o">(</span><span class="s">"resource:///pegasus.properties"</span><span class="o">)</span> |
| </code></pre></div></div> |
| <p><strong>2、Properties对象作为配置:</strong></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">createClient</span><span class="o">(</span><span class="n">props</span><span class="k">:</span> <span class="kt">Properties</span><span class="o">)</span><span class="k">:</span> <span class="kt">ScalaPegasusClient</span> |
| </code></pre></div></div> |
| <p>例如:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">Properties</span> <span class="n">pegasusConfig</span> <span class="k">=</span> <span class="k">new</span> <span class="nc">Properties</span><span class="o">();</span> |
| <span class="nv">pegasusConfig</span><span class="o">.</span><span class="py">setProperty</span><span class="o">(</span><span class="s">"meta_servers"</span><span class="o">,</span> <span class="s">"127.0.0.1:34601,127.0.0.1:34602,127.0.0.1:34603"</span><span class="o">);</span> |
| <span class="nv">pegasusConfig</span><span class="o">.</span><span class="py">setProperty</span><span class="o">(</span><span class="s">"operation_timeout"</span><span class="o">,</span> <span class="mi">100</span><span class="o">);</span> |
| <span class="k">val</span> <span class="nv">pegasusClient</span> <span class="k">=</span> <span class="nv">ScalaPegasusClientFactory</span><span class="o">.</span><span class="py">createClient</span><span class="o">(</span><span class="n">pegasusConfig</span><span class="o">)</span> |
| </code></pre></div></div> |
| <h2 id="数据操作">数据操作</h2> |
| <p>注意:调用函数前请确认导入<code class="language-plaintext highlighter-rouge">Serializers._</code>,详情参阅<a href="#实现原理">实现原理</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">val</span> <span class="nv">hashKey</span> <span class="k">=</span> <span class="mi">12345L</span> |
| <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">set</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="n">hashKey</span><span class="o">,</span> <span class="s">"sort_1"</span><span class="o">,</span> <span class="s">"value_1"</span><span class="o">)</span> |
| <span class="k">val</span> <span class="nv">value</span> <span class="k">=</span> <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">get</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="n">hashKey</span><span class="o">,</span> <span class="s">"sort_1"</span><span class="o">).</span><span class="py">as</span><span class="o">[</span><span class="kt">String</span><span class="o">]</span> |
| <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">del</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="n">hashKey</span><span class="o">,</span> <span class="s">"sort_1"</span><span class="o">)</span> |
| <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">exists</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="n">hashKey</span><span class="o">,</span> <span class="s">"sort_1"</span><span class="o">)</span> |
| <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">sortKeyCount</span><span class="o">(</span><span class="n">table</span><span class="o">,</span> <span class="n">hashKey</span><span class="o">)</span> |
| <span class="nv">pegasusClient</span><span class="o">.</span><span class="py">close</span> |
| </code></pre></div></div> |
| <h1 id="接口定义">接口定义</h1> |
| <p>scala的客户端类地址为:<code class="language-plaintext highlighter-rouge">com.xiaomi.infra.pegasus.scalaclient</code>,主要包括以下四个类:</p> |
| |
| <table> |
| <thead> |
| <tr> |
| <th>类名</th> |
| <th>功能</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>ScalaPegasusClientFactory</td> |
| <td>Client工厂类,用于创建Client实例</td> |
| </tr> |
| <tr> |
| <td>ScalaPegasusClient</td> |
| <td>Client类,封装了各种<strong>同步API</strong>,也可用于创建Table实例</td> |
| </tr> |
| <tr> |
| <td>ScalaPegasusTable</td> |
| <td>Table类,封装了操作单个Table数据的<strong>同步API</strong></td> |
| </tr> |
| <tr> |
| <td>ScalaPegasusAsyncTable</td> |
| <td>Table类,封装了操作单个Table数据的<strong>异步API</strong></td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <p>用户可以选择使用Client类(ScalaPegasusClient)或者是Table类(ScalaPegasusTable或者ScalaPegasusAsyncTable)存取数据,区别如下:</p> |
| <ul> |
| <li>Client类直接在参数中指定表名,省去了打开表的动作,使用更便捷。</li> |
| <li>Table类同时支持<strong>同步和异步API</strong>,而Client类只支持<strong>同步API</strong>。</li> |
| <li>Table类可以为每个操作设置单独的超时,而Client类无法单独指定超时,只能使用配置文件中的默认超时。</li> |
| <li>Table类的超时更准确,而Client类在首次读写请求时可能需要在内部初始化Table对象,所以首次读写的超时可能不太准确。 |
| <h2 id="scalapegasusclient接口">ScalaPegasusClient接口</h2> |
| <h3 id="实现原理">实现原理</h3> |
| <p><code class="language-plaintext highlighter-rouge">ScalaPegasusClient</code>接口通过持有<code class="language-plaintext highlighter-rouge">ScalaPegasusTable</code>实现对特定表的访问,而<code class="language-plaintext highlighter-rouge">ScalaPegasusTable</code>实际是封装了Java client的接口<code class="language-plaintext highlighter-rouge">PegasusTableInterface</code>而实现的。函数形式如下所示:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">get</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">)(</span><span class="k">implicit</span> <span class="n">hSer</span><span class="k">:</span> <span class="kt">SER</span><span class="o">[</span><span class="kt">H</span><span class="o">],</span> <span class="n">sSer</span><span class="k">:</span> <span class="kt">SER</span><span class="o">[</span><span class="kt">S</span><span class="o">])</span> <span class="k">=</span> <span class="o">{</span> |
| <span class="nf">getTable</span><span class="o">(</span><span class="n">table</span><span class="o">).</span><span class="py">get</span><span class="o">(</span><span class="n">hashKey</span><span class="o">,</span> <span class="n">sortKey</span><span class="o">)</span> |
| <span class="o">}</span> |
| </code></pre></div> </div> |
| <p>每一个数据表的操作函数都被定义为泛型函数,参数列表<code class="language-plaintext highlighter-rouge">(table: String, hashKey: H, sortKey: S)</code>是实际传入的参数,同时使用隐式参数<code class="language-plaintext highlighter-rouge">(implicit hSer: SER[H], sSer: SER[S])</code>完成对参数列表<code class="language-plaintext highlighter-rouge">(table: String, hashKey: H, sortKey: S)</code>泛型的转换。其中SER[H]是类<code class="language-plaintext highlighter-rouge">Serializers</code>的泛型声明,该类包含对不同泛型对象的隐式转换函数(转换成Java client中<code class="language-plaintext highlighter-rouge">PegasusTableInterface</code>的<code class="language-plaintext highlighter-rouge">byte[]参数</code>,在scala中对应为<code class="language-plaintext highlighter-rouge">Array[Byte]</code>,例子展示的是当泛型在使用的时候被定义为<code class="language-plaintext highlighter-rouge">String</code>时的隐式转换函数:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">implicit</span> <span class="k">object</span> <span class="nc">Utf8String</span> <span class="k">extends</span> <span class="nc">Serializer</span><span class="o">[</span><span class="kt">String</span><span class="o">]</span> <span class="o">{</span> |
| <span class="k">override</span> <span class="k">def</span> <span class="nf">serialize</span><span class="o">(</span><span class="n">obj</span><span class="k">:</span> <span class="kt">String</span><span class="o">)</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[</span><span class="kt">Byte</span><span class="o">]</span> <span class="k">=</span> <span class="nf">if</span> <span class="o">(</span><span class="n">obj</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="kc">null</span> <span class="k">else</span> <span class="nv">obj</span><span class="o">.</span><span class="py">getBytes</span><span class="o">(</span><span class="s">"UTF-8"</span><span class="o">)</span> |
| <span class="k">override</span> <span class="k">def</span> <span class="nf">deserialize</span><span class="o">(</span><span class="n">bytes</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[</span><span class="kt">Byte</span><span class="o">])</span><span class="k">:</span> <span class="kt">String</span> <span class="o">=</span> <span class="nf">if</span> <span class="o">(</span><span class="n">bytes</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="kc">null</span> <span class="k">else</span> <span class="k">new</span> <span class="nc">String</span><span class="o">(</span><span class="n">bytes</span><span class="o">,</span> <span class="s">"UTF-8"</span><span class="o">)</span> |
| <span class="o">}</span> |
| </code></pre></div> </div> |
| <p>客户端在调用<code class="language-plaintext highlighter-rouge">ScalaPegasusClient</code>提供的方法时,当对第一个参数列表的泛型参数传入<code class="language-plaintext highlighter-rouge">String</code>类型变量的时候,将被自动转换为<code class="language-plaintext highlighter-rouge">Array[Byte]</code>类型变量,并传入<code class="language-plaintext highlighter-rouge">PegasusTableInterface</code>的对应方法中。请确保包含<code class="language-plaintext highlighter-rouge">Serializers._</code>,否则无法完成参数的类型转换,你可以使用:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">com.xiaomi.infra.pegasus.scalaclient.Serializers._</span> |
| </code></pre></div> </div> |
| <p>导入依赖,目前接受的自动类型转换包括<code class="language-plaintext highlighter-rouge">String</code>、<code class="language-plaintext highlighter-rouge">Boolean</code>、<code class="language-plaintext highlighter-rouge">Int</code>、<code class="language-plaintext highlighter-rouge">Long</code>、<code class="language-plaintext highlighter-rouge">Short</code>、<code class="language-plaintext highlighter-rouge">Double</code>,这些类型可自动转换为<code class="language-plaintext highlighter-rouge">Array[Byte]</code>。</p> |
| <h3 id="api功能">API功能</h3> |
| <h4 id="exists">exists</h4> |
| <p>判断key是否存在,参见<a href="/zh/clients/java-client#exist">Java客户端文档#exist</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">exists</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| return: 返回是否存在,<code class="language-plaintext highlighter-rouge">boolean</code>类型</p> |
| <h4 id="sortkeycount">sortKeyCount</h4> |
| <p>获取一个hashkey下的sortkey值,参见<a href="/zh/clients/java-client#sortkeycount">Java客户端文档#sortKeyCount</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">sortKeyCount</span><span class="o">[</span><span class="kt">H</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| return:返回sortKeys个数,<code class="language-plaintext highlighter-rouge">long</code>类型</p> |
| <h4 id="get">get</h4> |
| <p>获取一条数据,参见<a href="/zh/clients/java-client#get">Java客户端文档#get</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">get</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| return:返回获取值,<code class="language-plaintext highlighter-rouge">Array[Byte]</code>类型,你可以使用<code class="language-plaintext highlighter-rouge">as[String]</code>转换为<code class="language-plaintext highlighter-rouge">String</code>类型</p> |
| <h4 id="batchget">batchGet</h4> |
| <p>读取一批数据,对get函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常。如果抛出了异常,则values中的结果是未定义的,参见<a href="/zh/clients/java-client#batchget">Java客户端文档#batchGet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchGet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">List</span><span class="o">[</span><span class="kt">PegasusKey</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">]])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| keys:PegasusKey列表,由hashKey和SortKey组成<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">PegasusResultList</code>类型</p> |
| <h4 id="batchget2">batchGet2</h4> |
| <p>读取一批数据,对get函数的批量封装。该函数并发地向server发送异步请求,但与上面batchGet不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchget">Java客户端文档#batchGet2</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchGet2</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">PegasusKey</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">]])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| keys:PegasusKey列表,有hashKey和SortKey组成<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">PegasusResultList</code>类型</p> |
| <h4 id="multiget">multiGet</h4> |
| <p>Java client包含多种multiGet接口,提供读同一HashKey下的多行数据功能,这里封装的是:</p> |
| <pre><code class="language-Java">public boolean multiGet(String tableName, byte[] hashKey, |
| List<byte[]> sortKeys, int maxFetchCount, |
| int maxFetchSize, List<Pair<byte[], byte[]>> values) throws PException; |
| </code></pre> |
| <p>支持最大数据量<code class="language-plaintext highlighter-rouge">maxFetchCount</code>和最大数据大小<code class="language-plaintext highlighter-rouge">maxFetchSize</code>的参数设置,参见<a href="/zh/clients/java-client#multiget">Java客户端文档#multiGet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">multiGet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKeys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">],</span> |
| <span class="n">maxFetchCount</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">100</span><span class="o">,</span> <span class="n">maxFetchSize</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">1000000</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKeys:sortKey列表<br /> |
| maxFetchCount:最大获取数据量,这里默认为100<br /> |
| maxFetchSize:最大获取数据值大小,这里默认为1000000字节<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">convertMultiGetResult</code>类型</p> |
| <h4 id="multigetrange">multiGetRange</h4> |
| <p>Java client包含多种multiGet接口,提供读同一HashKey下的多行数据功能,这里封装的是:</p> |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">multiGet</span><span class="o">(</span><span class="nc">String</span> <span class="n">tableName</span><span class="o">,</span> <span class="kt">byte</span><span class="o">[]</span> <span class="n">hashKey</span><span class="o">,</span> |
| <span class="kt">byte</span><span class="o">[]</span> <span class="n">startSortKey</span><span class="o">,</span> <span class="kt">byte</span><span class="o">[]</span> <span class="n">stopSortKey</span><span class="o">,</span> <span class="nc">MultiGetOptions</span> <span class="n">options</span><span class="o">,</span> |
| <span class="kt">int</span> <span class="n">maxFetchCount</span><span class="o">,</span> <span class="kt">int</span> <span class="n">maxFetchSize</span><span class="o">,</span> |
| <span class="nc">List</span><span class="o"><</span><span class="nc">Pair</span><span class="o"><</span><span class="kt">byte</span><span class="o">[],</span> <span class="kt">byte</span><span class="o">[]>></span> <span class="n">values</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">PException</span><span class="o">;</span> |
| </code></pre></div> </div> |
| <p>可以支持SortKey的范围查询和条件过滤,只读取满足特定条件的数据,参见<a href="/zh/clients/java-client#multiget">Java客户端文档#multiGet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">multiGetRange</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">startSortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">,</span> <span class="n">stopSortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">,</span> |
| <span class="n">options</span><span class="k">:</span> <span class="kt">Options.MultiGet</span><span class="o">,</span> |
| <span class="n">maxFetchCount</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">100</span><span class="o">,</span> <span class="n">maxFetchSize</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">1000000</span><span class="o">,</span> |
| <span class="n">timeout</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:hashKey,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| startSortKey:sortKey范围的起始值<br /> |
| stopSortKey:sortKey范围的终止值<br /> |
| options:查询条件<br /> |
| maxFetchCount:最大数据量,默认为100<br /> |
| maxFetchSize:最大数据值大小,默认为1000000字节<br /> |
| timeout:获取数据超时时间,默认为0,表示使用配置文件中的数值<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">convertMultiGetResult</code>类型</p> |
| <h4 id="batchmultiget">batchMultiGet</h4> |
| <p>对multiGet函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常。如果抛出了异常,则values中的结果是未定义的,参见<a href="/zh/clients/java-client#batchmultiget">Java客户端文档#batchMultiGet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultiGet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[(</span><span class="kt">H</span>, <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">])],</span> <span class="n">timeout</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>keys:hashKey-sortKeys列表,如:<code class="language-plaintext highlighter-rouge">Seq(("1",Seq("1","2")),("1",Seq("1","2")))</code><br /> |
| timeout:获取数据超时时间,默认为0,表示使用配置文件中的数值<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">List</code>类型</p> |
| <h4 id="batchmultiget2">batchMultiGet2</h4> |
| <p>对multiGet函数的批量封装。该函数并发地向server发送异步请求,并等待结果。但与上面batchMultiGet不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchmultiget2">Java客户端文档#batchMultiGet2</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultiGet2</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[(</span><span class="kt">H</span>, <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">])],</span> <span class="n">timeout</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>keys:hashKey-sortKeys列表,如:<code class="language-plaintext highlighter-rouge">Seq(("1",Seq("1","2")),("1",Seq("1","2")))</code><br /> |
| timeout:获取数据超时时间,默认为0,表示使用配置文件中的数值<br /> |
| return:返回获取值列表,<code class="language-plaintext highlighter-rouge">List</code>类型</p> |
| <h4 id="set">set</h4> |
| <p>写单行数据</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">set</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">](</span><span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">,</span> <span class="n">value</span><span class="k">:</span> <span class="kt">V</span><span class="o">,</span> <span class="n">ttl</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">second</span><span class="o">,</span> <span class="n">timeout</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| value:对应key的写入值,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| ttl:写入值保留时间,默认为0,表示永久保留<br /> |
| timeout:获取数据超时时间,默认为0,表示使用配置文件中的数值<br /> |
| return:无返回值</p> |
| <h4 id="batchset">batchSet</h4> |
| <p>写一批数据,对set函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常,参见<a href="/zh/clients/java-client#batchset">Java客户端文档#batchSet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchSet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">items</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">SetItem</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">]])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| items:写入值列表,由hashKey、sortKey、value组成<br /> |
| return:请求成功的个数(该方法不是原子的,有可能出现部分成功部分失败的情况,用户可以选择只使用成功的结果)</p> |
| <h4 id="batchset2">batchSet2</h4> |
| <p>对set函数的批量封装。该函数并发地向server发送异步请求,并等待结果。但与上面batchSet不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchset2">Java客户端文档#batchSet2</a></p> |
| <h4 id="multiset">multiSet</h4> |
| <p>Java client有两种接口,提供写同一HashKey下的多行数据,这里封装的是:</p> |
| <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">public</span> <span class="kt">void</span> <span class="nf">multiSet</span><span class="o">(</span><span class="nc">String</span> <span class="n">tableName</span><span class="o">,</span> <span class="kt">byte</span><span class="o">[]</span> <span class="n">hashKey</span><span class="o">,</span> |
| <span class="nc">List</span><span class="o"><</span><span class="nc">Pair</span><span class="o"><</span><span class="kt">byte</span><span class="o">[],</span> <span class="kt">byte</span><span class="o">[]>></span> <span class="n">values</span><span class="o">,</span> |
| <span class="kt">int</span> <span class="n">ttl_seconds</span><span class="o">)</span> <span class="kd">throws</span> <span class="nc">PException</span><span class="o">;</span> |
| </code></pre></div> </div> |
| <p>支持数据过期时间设定</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">multiSet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">values</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[(</span><span class="kt">S</span>, <span class="kt">V</span><span class="o">)],</span> <span class="n">ttl</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">second</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| value:写入值列表,由sortkey、value组成,如<code class="language-plaintext highlighter-rouge">Seq(("hashKey1","sortKey1"),("hashKey2","sortKey2"))</code><br /> |
| ttl:写入值保留时间,默认为0,表示永久保留<br /> |
| return:无返回值</p> |
| <h4 id="batchmultitset">batchMultitSet</h4> |
| <p>对multiSet函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常,参见<a href="/zh/clients/java-client#batchmultiset">Java客户端文档#batchMultiSet</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultitSet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">items</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">HashKeyData</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">]],</span> <span class="n">ttl</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">second</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| items:批量写入数据列表<br /> |
| ttl:写入值保留时间,默认为0,表示永久保留<br /> |
| return:请求成功的个数(该方法不是原子的,有可能出现部分成功部分失败的情况,用户可以选择只使用成功的结果)</p> |
| <h4 id="batchmultitset2">batchMultitSet2</h4> |
| <p>对multiSet函数的批量封装。该函数并发地向server发送异步请求,并等待结果。但与上面batchMultiSet不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchmultiset2">Java客户端文档#batchMultitSet2</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultiSet2</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">items</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">HashKeyData</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span>, <span class="kt">V</span><span class="o">]],</span> <span class="n">ttl</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">second</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| items:批量写入数据列表<br /> |
| ttl:写入值保留时间,默认为0,表示永久保留<br /> |
| return:请求成功的个数(该方法不是原子的,有可能出现部分成功部分失败的情况,用户可以选择只使用成功的结果)</p> |
| <h4 id="del">del</h4> |
| <p>删除单行数据,参见<a href="/zh/clients/java-client#del">Java客户端文档#del</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">del</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortkey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| return:无返回值</p> |
| <h4 id="batchdel">batchDel</h4> |
| <p>删除一批数据,对del函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常,参见<a href="/zh/clients/java-client#batchdel">Java客户端文档#batchDel</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">batchDel</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">PegasusKey</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">]])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| keys:键值列表,由hashKey和sortKey组成<br /> |
| return:请求成功的个数(该方法不是原子的,有可能出现部分成功部分失败的情况,用户可以选择只使用成功的结果)</p> |
| <h4 id="batchdel2">batchDel2</h4> |
| <p>对del函数的批量封装。该函数并发地向server发送异步请求,并等待结果。但与上面batchDel不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchdel2">Java客户端文档#batchDel2</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchDel2</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">PegasusKey</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">]])</span> |
| </code></pre></div> </div> |
| <h4 id="multidel">multiDel</h4> |
| <p>删同一HashKey下的多行数据,参见<a href="/zh/clients/java-client#multidel">Java客户端文档#multiDel</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">multiDel</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKeys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKeys:sortKey列表<br /> |
| return:无返回值</p> |
| <h4 id="batchmultidel">batchMultiDel</h4> |
| <p>对multiDel函数的批量封装。该函数并发地向server发送异步请求,并等待结果。如果有任意一个请求失败,就提前终止并抛出异常,参见<a href="/zh/clients/java-client#batchmultidel">Java客户端文档#batchMultiDel</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultiDel</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[(</span><span class="kt">H</span>, <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">])])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| keys:键列表,由hashKey、sortKeys组成,如<code class="language-plaintext highlighter-rouge">Seq(("hashKey1",(sortKey1,sortKey2),("hashKey2",(sortKey3,sortKey4))</code><br /> |
| return:无返回值</p> |
| <h4 id="batchmultidel2">batchMultiDel2</h4> |
| <p>对del函数的批量封装。该函数并发地向server发送异步请求,并等待结果。但与上面batchMultiDel不同的是,无论请求成功还是失败,它都会等待所有请求结束,参见<a href="/zh/clients/java-client#batchmultidel2">Java客户端文档#batchMultiDel2</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">batchMultiDel2</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">keys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[(</span><span class="kt">H</span>, <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">])])</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| keys:键列表,由hashKey、sortKeys组成,如<code class="language-plaintext highlighter-rouge">Seq(("hashKey1",(sortKey1,sortKey2),("hashKey2",(sortKey3,sortKey4))</code><br /> |
| return:无返回值</p> |
| <h4 id="ttl">ttl</h4> |
| <p>获取单行数据的TTL时间。TTL表示Time To Live,表示该数据还能存活多久。如果超过存活时间,数据就读不到了,参见<a href="/zh/clients/java-client#ttl">Java客户端文档#ttl</a></p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">ttl</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKeys:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| return:TTL时间,单位为秒。如果该数据没有设置TTL,返回-1;如果该数据不存在,返回-2</p> |
| <h4 id="incr">incr</h4> |
| <p>单行原子增(减)操作,详细说明参见<a href="/zh/api/single-atomic">单行原子操作</a>,该操作先将key所指向的value的字节串转换为int64类型(实现上类似于Java的Long.parseLong()函数),然后加上increment,将结果转换为字节串设置为新值。当参数increment为正数时,即原子加;当参数increment为负数时,即原子减,参见<a href="/zh/clients/java-client#incr">Java客户端文档#incr</a>。</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">incr</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">table</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> <span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKey</span><span class="k">:</span> <span class="kt">S</span><span class="o">,</span> <span class="n">increment</span><span class="k">:</span> <span class="kt">Long</span><span class="o">,</span> <span class="n">ttl</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| </code></pre></div> </div> |
| <p>table:表名,通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| hashKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| sortKey:通常为<code class="language-plaintext highlighter-rouge">String</code>类型<br /> |
| increment:增加值<br /> |
| ttl:值保留时间,默认为0,表示永久保留<br /> |
| return:操作成功后的新值</p> |
| <h2 id="scalapegasustable接口">ScalaPegasusTable接口</h2> |
| <p>ScalaPegasusTable接口提供的方法均为同步API,<code class="language-plaintext highlighter-rouge">ScalaPegasusClient</code>接口即默认封装该接口,详细API信息参见<a href="#scalapegasusclient接口">ScalaPegasusClient接口</a></p> |
| <h2 id="scalapegasusasynctable">ScalaPegasusAsyncTable</h2> |
| <p>ScalaPegasusAsyncTable接口提供的方法均为异步API,封装了java client的异步接口。对应API功能可参考<a href="#scalapegasusclient接口">ScalaPegasusClient接口</a>和<a href="/zh/clients/java-client#pegasustableinterface接口">Java客户端文档#PegasusTableInterface接口</a>,接口封装形式如:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">@throws</span><span class="o">[</span><span class="kt">PException</span><span class="o">]</span> |
| <span class="k">def</span> <span class="nf">multiGet</span><span class="o">[</span><span class="kt">H</span>, <span class="kt">S</span><span class="o">](</span><span class="n">hashKey</span><span class="k">:</span> <span class="kt">H</span><span class="o">,</span> <span class="n">sortKeys</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">S</span><span class="o">],</span> <span class="n">maxFetchCount</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">100</span><span class="o">,</span> <span class="n">maxFetchSize</span><span class="k">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">1000000</span><span class="o">,</span> <span class="n">timeout</span><span class="k">:</span> <span class="kt">Duration</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">milli</span><span class="o">)</span> |
| <span class="o">(</span><span class="k">implicit</span> <span class="n">hSer</span><span class="k">:</span> <span class="kt">SER</span><span class="o">[</span><span class="kt">H</span><span class="o">],</span> <span class="n">sSer</span><span class="k">:</span> <span class="kt">SER</span><span class="o">[</span><span class="kt">S</span><span class="o">])</span><span class="k">:</span> <span class="kt">Future</span><span class="o">[</span><span class="kt">MultiGetResult</span><span class="o">[</span><span class="kt">S</span>, <span class="kt">Array</span><span class="o">[</span><span class="kt">Byte</span><span class="o">]]]</span> <span class="k">=</span> <span class="o">{</span> |
| <span class="k">val</span> <span class="nv">result</span> <span class="k">=</span> <span class="nv">table</span><span class="o">.</span><span class="py">asyncMultiGet</span><span class="o">(</span><span class="n">hashKey</span><span class="o">,</span> <span class="n">sortKeys</span><span class="o">,</span> <span class="n">maxFetchCount</span><span class="o">,</span> <span class="n">maxFetchSize</span><span class="o">,</span> <span class="n">timeout</span><span class="o">)</span> |
| <span class="nf">toScala</span><span class="o">(</span><span class="n">result</span><span class="o">)(</span><span class="n">convertMultiGetResult</span><span class="o">[</span><span class="kt">S</span><span class="o">])</span> |
| <span class="o">}</span> |
| </code></pre></div> </div> |
| <p>其中<code class="language-plaintext highlighter-rouge">table.asyncMultiGet(hashKey, sortKeys, maxFetchCount, maxFetchSize, timeout)</code>即Java client接口,参数传递原理参见<a href="#实现原理">实现原理</a>,<code class="language-plaintext highlighter-rouge">toScala(result)(convertMultiGetResult[S])</code>的完整形式如下:</p> |
| <div class="language-scala highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">implicit</span> <span class="k">private</span> <span class="o">[</span><span class="kt">scalaclient</span><span class="o">]</span> <span class="k">def</span> <span class="nf">toScala</span><span class="o">[</span><span class="kt">A</span>, <span class="kt">B</span><span class="o">](</span><span class="n">future</span><span class="k">:</span> <span class="kt">NFuture</span><span class="o">[</span><span class="kt">A</span><span class="o">])(</span><span class="k">implicit</span> <span class="n">f</span><span class="k">:</span> <span class="kt">A</span> <span class="o">=></span> <span class="n">B</span><span class="o">)</span><span class="k">:</span> <span class="kt">Future</span><span class="o">[</span><span class="kt">B</span><span class="o">]</span> <span class="k">=</span> <span class="o">{</span> |
| <span class="k">val</span> <span class="nv">promise</span> <span class="k">=</span> <span class="nc">Promise</span><span class="o">[</span><span class="kt">B</span><span class="o">]()</span> |
| <span class="nv">future</span><span class="o">.</span><span class="py">addListener</span><span class="o">(</span><span class="k">new</span> <span class="nc">GenericFutureListener</span><span class="o">[</span><span class="kt">NFuture</span><span class="o">[</span><span class="k">_</span> <span class="k">>:</span> <span class="kt">A</span><span class="o">]]</span> <span class="o">{</span> |
| <span class="k">override</span> <span class="k">def</span> <span class="nf">operationComplete</span><span class="o">(</span><span class="n">future</span><span class="k">:</span> <span class="kt">NFuture</span><span class="o">[</span><span class="k">_</span> <span class="k">>:</span> <span class="kt">A</span><span class="o">])</span><span class="k">:</span> <span class="kt">Unit</span> <span class="o">=</span> <span class="o">{</span> |
| <span class="nf">if</span> <span class="o">(</span><span class="nv">future</span><span class="o">.</span><span class="py">isSuccess</span><span class="o">)</span> <span class="o">{</span> |
| <span class="nv">promise</span><span class="o">.</span><span class="py">success</span><span class="o">(</span><span class="nf">f</span><span class="o">(</span><span class="nv">future</span><span class="o">.</span><span class="py">get</span><span class="o">.</span><span class="py">asInstanceOf</span><span class="o">[</span><span class="kt">A</span><span class="o">]))</span> |
| <span class="o">}</span> <span class="k">else</span> <span class="o">{</span> |
| <span class="nv">promise</span><span class="o">.</span><span class="py">failure</span><span class="o">(</span><span class="nv">future</span><span class="o">.</span><span class="py">cause</span><span class="o">())</span> |
| <span class="o">}</span> |
| <span class="o">}</span> |
| <span class="o">})</span> |
| <span class="nv">promise</span><span class="o">.</span><span class="py">future</span> |
| <span class="o">}</span> |
| </code></pre></div> </div> |
| <p>使用<code class="language-plaintext highlighter-rouge">隐式转换</code>实现Java的异步编程到Scala的异步编程变换,该函数利用<code class="language-plaintext highlighter-rouge">io.netty.util.concurrent.{GenericFutureListener, Future => NFuture}</code>实现异步编程。</p> |
| </li> |
| </ul> |
| |
| </div> |
| </section> |
| <footer class="footer"> |
| <div class="container"> |
| <div class="content is-small has-text-centered"> |
| <div style="margin-bottom: 20px;"> |
| <a href="http://incubator.apache.org"> |
| <img src="/assets/images/egg-logo.png" |
| width="15%" |
| alt="Apache Incubator"/> |
| </a> |
| </div> |
| Copyright © 2023 <a href="http://www.apache.org">The Apache Software Foundation</a>. |
| Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version |
| 2.0</a>. |
| <br><br> |
| |
| Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF), |
| sponsored by the Apache Incubator. Incubation is required of all newly accepted projects |
| until a further review indicates that the infrastructure, communications, and decision making process |
| have stabilized in a manner consistent with other successful ASF projects. While incubation status is |
| not necessarily a reflection of the completeness or stability of the code, it does indicate that the |
| project has yet to be fully endorsed by the ASF. |
| |
| <br><br> |
| Apache Pegasus, Pegasus, Apache, the Apache feather logo, and the Apache Pegasus project logo are either |
| registered trademarks or trademarks of The Apache Software Foundation in the United States and other |
| countries. |
| </div> |
| </div> |
| </footer> |
| </div> |
| |
| <!-- right panel --> |
| <div class="dashboard-panel is-small is-scrollable is-hidden-mobile"> |
| <p class="menu-label"> |
| <span class="icon"> |
| <i class="fa fa-bars" aria-hidden="true"></i> |
| </span> |
| 本页导航 |
| </p> |
| <ul class="menu-list"> |
| <li><a href="#获取客户端">获取客户端</a></li> |
| <li><a href="#使用客户端">使用客户端</a> |
| <ul> |
| <li><a href="#获取实例">获取实例</a></li> |
| <li><a href="#数据操作">数据操作</a></li> |
| </ul> |
| </li> |
| <li><a href="#接口定义">接口定义</a> |
| <ul> |
| <li><a href="#scalapegasusclient接口">ScalaPegasusClient接口</a> |
| <ul> |
| <li><a href="#实现原理">实现原理</a></li> |
| <li><a href="#api功能">API功能</a> |
| <ul> |
| <li><a href="#exists">exists</a></li> |
| <li><a href="#sortkeycount">sortKeyCount</a></li> |
| <li><a href="#get">get</a></li> |
| <li><a href="#batchget">batchGet</a></li> |
| <li><a href="#batchget2">batchGet2</a></li> |
| <li><a href="#multiget">multiGet</a></li> |
| <li><a href="#multigetrange">multiGetRange</a></li> |
| <li><a href="#batchmultiget">batchMultiGet</a></li> |
| <li><a href="#batchmultiget2">batchMultiGet2</a></li> |
| <li><a href="#set">set</a></li> |
| <li><a href="#batchset">batchSet</a></li> |
| <li><a href="#batchset2">batchSet2</a></li> |
| <li><a href="#multiset">multiSet</a></li> |
| <li><a href="#batchmultitset">batchMultitSet</a></li> |
| <li><a href="#batchmultitset2">batchMultitSet2</a></li> |
| <li><a href="#del">del</a></li> |
| <li><a href="#batchdel">batchDel</a></li> |
| <li><a href="#batchdel2">batchDel2</a></li> |
| <li><a href="#multidel">multiDel</a></li> |
| <li><a href="#batchmultidel">batchMultiDel</a></li> |
| <li><a href="#batchmultidel2">batchMultiDel2</a></li> |
| <li><a href="#ttl">ttl</a></li> |
| <li><a href="#incr">incr</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="#scalapegasustable接口">ScalaPegasusTable接口</a></li> |
| <li><a href="#scalapegasusasynctable">ScalaPegasusAsyncTable</a></li> |
| </ul> |
| </li> |
| </ul> |
| |
| </div> |
| </div> |
| |
| <script src="/assets/js/app.js" type="text/javascript"></script> |
| <script> |
| docsearch({ |
| container: '#docsearch', |
| appId: 'QRN30RBW0S', |
| indexName: 'pegasus-apache', |
| apiKey: 'd3a3252fa344359766707a106c4ed88f', |
| debug: true |
| }); |
| </script> |
| |
| </body> |
| |
| </html> |