blob: a41120713620ad06623a596d9dfb25d938d8811b [file] [log] [blame]
<!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 := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; %% &quot;pegasus-scala-client&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; % &quot;pegasus-scala-client_2.11&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: &lt;dependency&gt; &lt;groupId&gt;com.xiaomi.infra&lt;/groupId&gt; &lt;artifactId&gt;pegasus-scala-client_2.11&lt;/artifactId&gt; &lt;version&gt;1.11.4-1&lt;/version&gt; &lt;/dependency&gt; 使用客户端" />
<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 := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; %% &quot;pegasus-scala-client&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; % &quot;pegasus-scala-client_2.11&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: &lt;dependency&gt; &lt;groupId&gt;com.xiaomi.infra&lt;/groupId&gt; &lt;artifactId&gt;pegasus-scala-client_2.11&lt;/artifactId&gt; &lt;version&gt;1.11.4-1&lt;/version&gt; &lt;/dependency&gt; 使用客户端" />
<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 := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; %% &quot;pegasus-scala-client&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 或者配置为: //使用maven仓库(你可以使用resolvers ++= Seq()添加自定义maven仓库),需要添加后缀 scalaVersion := &quot;2.12.8&quot; libraryDependencies ++= Seq( &quot;com.xiaomi.infra&quot; % &quot;pegasus-scala-client_2.11&quot; % &quot;1.11.4-1-SNAPSHOT&quot; ) 如果你的项目通过maven构建,则可通过maven配置在项目中使用,例如: &lt;dependency&gt; &lt;groupId&gt;com.xiaomi.infra&lt;/groupId&gt; &lt;artifactId&gt;pegasus-scala-client_2.11&lt;/artifactId&gt; &lt;version&gt;1.11.4-1&lt;/version&gt; &lt;/dependency&gt; 使用客户端","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">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>com.xiaomi.infra<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>pegasus-scala-client_2.11<span class="nt">&lt;/artifactId&gt;</span>
<span class="nt">&lt;version&gt;</span>1.11.4-1<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</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&lt;byte[]&gt; sortKeys, int maxFetchCount,
int maxFetchSize, List&lt;Pair&lt;byte[], byte[]&gt;&gt; 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">&lt;</span><span class="nc">Pair</span><span class="o">&lt;</span><span class="kt">byte</span><span class="o">[],</span> <span class="kt">byte</span><span class="o">[]&gt;&gt;</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">&lt;</span><span class="nc">Pair</span><span class="o">&lt;</span><span class="kt">byte</span><span class="o">[],</span> <span class="kt">byte</span><span class="o">[]&gt;&gt;</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">=&gt;</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">&gt;:</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">&gt;:</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 =&gt; 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 &copy; 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>