blob: be5684ad42a5c8d2c0dd586661a606086457c3bb [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pegasus | Redis</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>Redis | Pegasus</title>
<meta name="generator" content="Jekyll v4.3.2" />
<meta property="og:title" content="Redis" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Redis适配" />
<meta property="og:description" content="Redis适配" />
<meta property="og:site_name" content="Pegasus" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2023-11-23T14:57:08+00:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Redis" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2023-11-23T14:57:08+00:00","datePublished":"2023-11-23T14:57:08+00:00","description":"Redis适配","headline":"Redis","mainEntityOfPage":{"@type":"WebPage","@id":"/api/redis"},"url":"/api/redis"}</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="">
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="is-active">
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="">
白名单
</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=" /api/redis"><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 ">
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 is-active">
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 ">
白名单
</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=" /api/redis"><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">Redis适配</p>
</div>
</section>
<section class="section" style="padding-top: 2rem;">
<div class="content">
<h1 id="redis适配">Redis适配</h1>
<h2 id="架构">架构</h2>
<p>在pegasus上添加了redis proxy后,用户可以通过redis协议直接访问proxy,从而间接访问pegasus服务。整体架构如下:</p>
<p><img src="/assets/images/redis_proxy_arch.png" alt="redis_proxy_arch.png" class="img-responsive" /></p>
<p>redis客户端与redis proxy之间使用<a href="https://redis.io/topics/protocol">redis协议</a>,目前proxy已支持所有redis 数据类型(Simple Strings、Errors、Integers、Bulk Strings、Arrays)。</p>
<p>redis proxy与pegasus集群之间使用pegasus的thrift协议,proxy在这里就类似一个普通的pegasus client,从meta server查询meta信息、与replica server进行用户数据的读写。</p>
<h2 id="提供服务的形式">提供服务的形式</h2>
<p>跟redis服务一样,以<code class="language-plaintext highlighter-rouge">host:port</code>形式提供,如果服务压力大,可以提供多个<code class="language-plaintext highlighter-rouge">host:port</code>来避免单点proxy压力过大造成瓶颈。当提供多个redis proxy地址时,由于后端访问的都是同一个集群的同一张表,数据是完全相同的。用户可以采用round robin, hash等方式进行负载均衡。</p>
<blockquote>
<p>proxy的可执行文件为<code class="language-plaintext highlighter-rouge">pegasus_rproxy</code>, 由<code class="language-plaintext highlighter-rouge">./run.sh pack_tools</code>打包生成。</p>
</blockquote>
<h2 id="配置">配置</h2>
<p>redis proxy的配置文件规则遵循<a href="/zh/administration/config">配置说明</a>,参考<a href="https://github.com/apache/incubator-pegasus/blob/master/src/geo/bench/config.ini">示例</a></p>
<p>在redis proxy中有几项特有的配置项需要注意:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[apps.proxy]
name = proxy
type = proxy
; which pegasus cluster and table dose this proxy redirect to
; 'onebox' is the cluster name which will be used in the next section
; 'temp' is the table name in the cluster
arguments = onebox temp
; if using GEO APIs, an extra table name which will store geo index data
; should be appended, i.e.
; arguments = onebox temp temp_geo
; port serve for redis clients
ports = 6379
pools = THREAD_POOL_DEFAULT
run = true
[pegasus.clusters]
; meta serer list the proxy redirect to
onebox = 127.0.0.1:34601,127.0.0.1:34602,127.0.0.1:34603
</code></pre></div></div>
<h2 id="apis">APIs</h2>
<p>redis的原生命令请见<a href="https://redis.io/commands">这里</a></p>
<p>以下接口说明都兼容redis原生命令,但支持的参数可能少于redis,以下接口说明中都给出了目前Pegasus代理所支持的所有参数,未给出的目前不支持。</p>
<h3 id="key规则">KEY规则</h3>
<h4 id="kv-api">KV API</h4>
<p>对于redis的普通key-value操作,key对应到Pegasus中的hashkey,而Pegasus中的sortkey被设置为空串<code class="language-plaintext highlighter-rouge">""</code>。如<code class="language-plaintext highlighter-rouge">SET</code>, <code class="language-plaintext highlighter-rouge">GET</code>, <code class="language-plaintext highlighter-rouge">TTL</code>, <code class="language-plaintext highlighter-rouge">INCR</code>等。</p>
<h4 id="geo-api">GEO API</h4>
<p>在原生redis中,<code class="language-plaintext highlighter-rouge">GEO*</code>接口操作的数据是通过<code class="language-plaintext highlighter-rouge">GEOADD key longitude latitude member</code>添加到数据库中的,这时<code class="language-plaintext highlighter-rouge">key</code>是一个namespace的概念,而不是<code class="language-plaintext highlighter-rouge">SET</code>操作时的key。</p>
<p>而pegasus proxy的<code class="language-plaintext highlighter-rouge">GEO*</code>接口操作的数据是通过<code class="language-plaintext highlighter-rouge">SET</code>接口添加到数据库中的,<code class="language-plaintext highlighter-rouge">SET</code>的key对应于<code class="language-plaintext highlighter-rouge">GEO*</code>接口的member,而<code class="language-plaintext highlighter-rouge">GEO*</code>接口的key则只能是<code class="language-plaintext highlighter-rouge">""</code>。也就是说,在pegasus 的redis GEO数据中,不再有namespace的概念,全部数据在同一空间<code class="language-plaintext highlighter-rouge">""</code>下,若要区分key空间,则可以在pegasus层创建新的table实现。具体参考后面的示例。</p>
<h3 id="set">SET</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SET key value [EX seconds]
</code></pre></div></div>
<h3 id="get">GET</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GET key
</code></pre></div></div>
<h3 id="del">DEL</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DEL key
</code></pre></div></div>
<p>注意:</p>
<ol>
<li>这里的接口返回值和redis的定义略有不同:当key不存在时,redis接口返回0,这里则返回1。</li>
</ol>
<h3 id="setex">SETEX</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SETEX key seconds value
</code></pre></div></div>
<h3 id="ttl">TTL</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>TTL key
</code></pre></div></div>
<h3 id="pttl">PTTL</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PTTL key
</code></pre></div></div>
<h3 id="incr">INCR</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INCR key
</code></pre></div></div>
<h3 id="incrby">INCRBY</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>INCRBY key increment
</code></pre></div></div>
<h3 id="decr">DECR</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DECR key
</code></pre></div></div>
<h3 id="decrby">DECRBY</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DECRBY key decrement
</code></pre></div></div>
<h3 id="geodist">GEODIST</h3>
<p><a href="geo">GEO接口的实现原理</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GEODIST key member1 member2 [unit]
</code></pre></div></div>
<p>注意:</p>
<ol>
<li>key规则遵循GEO API的key规则:这里的key只能是<code class="language-plaintext highlighter-rouge">""</code>,而这里member对应于<code class="language-plaintext highlighter-rouge">SET</code>操作时的key。</li>
</ol>
<h3 id="georadius">GEORADIUS</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD][WITHDIST] [WITHHASH][COUNT count] [ASC|DESC]
</code></pre></div></div>
<p>注意:</p>
<ol>
<li>key规则遵循GEO API的key规则:这里的key只能是<code class="language-plaintext highlighter-rouge">""</code>,而这里member对应于<code class="language-plaintext highlighter-rouge">SET</code>操作时的key。</li>
<li>我们对redis的<code class="language-plaintext highlighter-rouge">WITHHASH</code>参数进行了修改,使用它将会返回该member的value。</li>
</ol>
<h3 id="georadiusbymember">GEORADIUSBYMEMBER</h3>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD][WITHDIST] [WITHHASH][COUNT count] [ASC|DESC]
</code></pre></div></div>
<p>注意:</p>
<ol>
<li>key规则同上,这里的key只能是<code class="language-plaintext highlighter-rouge">""</code>,而这里member对应于<code class="language-plaintext highlighter-rouge">SET</code>操作时的key。</li>
<li>我们对redis的<code class="language-plaintext highlighter-rouge">WITHHASH</code>参数进行了修改,使用它将会返回该member的value。</li>
</ol>
<h2 id="示例">示例</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>127.0.0.1:6379&gt; SET abc 1 EX 60
OK
127.0.0.1:6379&gt; GET abc
"1"
127.0.0.1:6379&gt; TTL abc
(integer) 52
127.0.0.1:6379&gt; INCR abc
(integer) 2
// 以下是GEO API, 注意需要提前创建好geo表
127.0.0.1:6379&gt; SET 1cc0001000010290050356f "1cc0001000010290050356f|2018-06-10 23:59:59|2018-06-11 13:00:00|wx5j5ff05|116.886447|40.269031|4.863045|20.563248|0|-1"
OK
127.0.0.1:6379&gt; SET 2cc0001000010290050356f "2cc0001000010290050356f|2018-06-10 23:59:59|2018-06-11 13:00:00|wx5j5ff05|115.886447|41.269031|4.863045|20.563248|0|-1"
OK
127.0.0.1:6379&gt; GEORADIUS "" 116.889137 40.261774 1000 m COUNT 100 ASC WITHDIST WITHCOORD
1) 1) "1cc0001000010290050356f"
2) "838.600772"
3) 1) "116.886447"
2) "40.269031"
4) "1cc0001000010290050356f|2018-06-10 23:59:59|2018-06-11 13:00:00|wx5j5ff05|116.886447|40.269031|4.863045|20.563248|0|-1"
127.0.0.1:6379&gt; GEORADIUSBYMEMBER "" 1cc0001000010290050356f 1000 m WITHCOORD WITHDIST WITHHASH
1) 1) "1cc0001000010290050356f"
2) "0.000000"
3) 1) "116.886447"
2) "40.269031"
4) "1cc0001000010290050356f|2018-06-10 23:59:59|2018-06-11 13:00:00|wx5j5ff05|116.886447|40.269031|4.863045|20.563248|0|-1"
127.0.0.1:6379&gt; GEODIST "" 1cc0001000010290050356f 2cc0001000010290050356f m
"139483.293598"
</code></pre></div></div>
</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="#redis适配">Redis适配</a>
<ul>
<li><a href="#架构">架构</a></li>
<li><a href="#提供服务的形式">提供服务的形式</a></li>
<li><a href="#配置">配置</a></li>
<li><a href="#apis">APIs</a>
<ul>
<li><a href="#key规则">KEY规则</a>
<ul>
<li><a href="#kv-api">KV API</a></li>
<li><a href="#geo-api">GEO API</a></li>
</ul>
</li>
<li><a href="#set">SET</a></li>
<li><a href="#get">GET</a></li>
<li><a href="#del">DEL</a></li>
<li><a href="#setex">SETEX</a></li>
<li><a href="#ttl">TTL</a></li>
<li><a href="#pttl">PTTL</a></li>
<li><a href="#incr">INCR</a></li>
<li><a href="#incrby">INCRBY</a></li>
<li><a href="#decr">DECR</a></li>
<li><a href="#decrby">DECRBY</a></li>
<li><a href="#geodist">GEODIST</a></li>
<li><a href="#georadius">GEORADIUS</a></li>
<li><a href="#georadiusbymember">GEORADIUSBYMEMBER</a></li>
</ul>
</li>
<li><a href="#示例">示例</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>