{"id":996,"date":"2013-06-09T11:41:10","date_gmt":"2013-06-09T03:41:10","guid":{"rendered":"http:\/\/www.poloo.org\/?p=996"},"modified":"2013-06-09T11:41:10","modified_gmt":"2013-06-09T03:41:10","slug":"php%e6%89%a9%e5%b1%95%e4%b9%8bredis%e6%96%87%e6%a1%a3","status":"publish","type":"post","link":"https:\/\/www.poloo.org\/?p=996","title":{"rendered":"php\u6269\u5c55\u4e4bredis\u6587\u6863"},"content":{"rendered":"<p>Redis\u670d\u52a1\u5668\uff1a<br \/>\n\u5b89\u88c5redis\uff1asudo apt-get install redis-server<br \/>\n\u542f\u52a8redis\uff1a\/usr\/bin\/redis-server \/etc\/redis\/redis.conf<br \/>\n\u91cd\u542fredis\uff1a\/etc\/init.d\/redis-server restart<\/p>\n<p>Redis\u5ba2\u6237\u7aef\uff1a<br \/>\nphpredis<br \/>\n\u4e0b\u8f7d\u5730\u5740\uff1ahttps:\/\/github.com\/nicolasff\/phpredis\/zipball\/master<br \/>\nunzip  nicolasff-phpredis-2.2.1-63-gf3dff08.zip;<br \/>\ncd nicolasff-phpredis-f3dff08;<br \/>\nphpize;<br \/>\n.\/configure -with-php-config=\/usr\/bin\/php-config;<br \/>\nmake;<br \/>\nsudo make install;<br \/>\n\u5728\/etc\/php5\/conf.d\u76ee\u5f55\u4e0b\u521b\u5efaredis.ini,<br \/>\n\u5185\u5bb9\u4e3a\uff1aextension=\/usr\/lib\/php5\/20090626+lfs\/redis.so<\/p>\n<p>PHP-redis\u4e2d\u6587\u6587\u6863<br \/>\nphpredis\u662fphp\u7684\u4e00\u4e2a\u6269\u5c55\uff0c\u6548\u7387\u662f\u76f8\u5f53\u9ad8\u6709\u94fe\u8868\u6392\u5e8f\u529f\u80fd\uff0c\u5bf9\u521b\u5efa\u5185\u5b58\u7ea7\u7684\u6a21\u5757\u4e1a\u52a1\u5173\u7cfb<br \/>\n\u5f88\u6709\u7528;\u4ee5\u4e0b\u662fredis\u5b98\u65b9\u63d0\u4f9b\u7684\u547d\u4ee4\u4f7f\u7528\u6280\u5de7:<br \/>\n\u4e0b\u8f7d\u5730\u5740\u5982\u4e0b\uff1a<br \/>\nhttps:\/\/github.com\/owlient\/phpredis\uff08\u652f\u6301redis 2.0.4\uff09<br \/>\n<!--more--><br \/>\nRedis::__construct\u6784\u9020\u51fd\u6570<br \/>\n$redis = new Redis();<\/p>\n<p>connect, open \u94fe\u63a5redis\u670d\u52a1<br \/>\n\u53c2\u6570<br \/>\nhost: string\uff0c\u670d\u52a1\u5730\u5740<br \/>\nport: int,\u7aef\u53e3\u53f7<br \/>\ntimeout: float,\u94fe\u63a5\u65f6\u957f (\u53ef\u9009, \u9ed8\u8ba4\u4e3a 0 \uff0c\u4e0d\u9650\u94fe\u63a5\u65f6\u95f4)<br \/>\n\u6ce8: \u5728redis.conf\u4e2d\u4e5f\u6709\u65f6\u95f4\uff0c\u9ed8\u8ba4\u4e3a300<\/p>\n<p>pconnect, popen \u4e0d\u4f1a\u4e3b\u52a8\u5173\u95ed\u7684\u94fe\u63a5<br \/>\n\u53c2\u8003\u4e0a\u9762<\/p>\n<p>setOption \u8bbe\u7f6eredis\u6a21\u5f0f<\/p>\n<p>getOption \u67e5\u770bredis\u8bbe\u7f6e\u7684\u6a21\u5f0f<\/p>\n<p>ping \u67e5\u770b\u8fde\u63a5\u72b6\u6001<\/p>\n<p>get \u5f97\u5230\u67d0\u4e2akey\u7684\u503c\uff08string\u503c\uff09<br \/>\n\u5982\u679c\u8be5key\u4e0d\u5b58\u5728\uff0creturn false<\/p>\n<p>set \u5199\u5165key \u548c value\uff08string\u503c\uff09<br \/>\n\u5982\u679c\u5199\u5165\u6210\u529f\uff0creturn ture<\/p>\n<p>setex \u5e26\u751f\u5b58\u65f6\u95f4\u7684\u5199\u5165\u503c<br \/>\n$redis->setex(&#8216;key&#8217;, 3600, &#8216;value&#8217;); \/\/ sets key \u2192 value, with 1h TTL.<\/p>\n<p>setnx \u5224\u65ad\u662f\u5426\u91cd\u590d\u7684\uff0c\u5199\u5165\u503c<br \/>\n$redis->setnx(&#8216;key&#8217;, &#8216;value&#8217;);<br \/>\n$redis->setnx(&#8216;key&#8217;, &#8216;value&#8217;);<\/p>\n<p>delete  \u5220\u9664\u6307\u5b9akey\u7684\u503c<br \/>\n\u8fd4\u56de\u5df2\u7ecf\u5220\u9664key\u7684\u4e2a\u6570\uff08\u957f\u6574\u6570\uff09<br \/>\n$redis->delete(&#8216;key1&#8217;, &#8216;key2&#8217;);<br \/>\n$redis->delete(array(&#8216;key3&#8217;, &#8216;key4&#8217;, &#8216;key5&#8217;));<\/p>\n<p>ttl<br \/>\n\u5f97\u5230\u4e00\u4e2akey\u7684\u751f\u5b58\u65f6\u95f4<\/p>\n<p>persist<br \/>\n\u79fb\u9664\u751f\u5b58\u65f6\u95f4\u5230\u671f\u7684key<br \/>\n\u5982\u679ckey\u5230\u671f true \u5982\u679c\u4e0d\u5230\u671f false<\/p>\n<p>mset \uff08redis\u7248\u672c1.1\u4ee5\u4e0a\u624d\u53ef\u4ee5\u7528\uff09<br \/>\n\u540c\u65f6\u7ed9\u591a\u4e2akey\u8d4b\u503c<br \/>\n$redis->mset(array(&#8216;key0&#8217; => &#8216;value0&#8217;, &#8216;key1&#8217; => &#8216;value1&#8217;));<\/p>\n<p>multi, exec, discard<br \/>\n\u8fdb\u5165\u6216\u8005\u9000\u51fa\u4e8b\u52a1\u6a21\u5f0f<br \/>\n\u53c2\u6570\u53ef\u9009Redis::MULTI\u6216Redis::PIPELINE. \u9ed8\u8ba4\u662f Redis::MULTI<br \/>\nRedis::MULTI\uff1a\u5c06\u591a\u4e2a\u64cd\u4f5c\u5f53\u6210\u4e00\u4e2a\u4e8b\u52a1\u6267\u884c<br \/>\nRedis::PIPELINE:\u8ba9\uff08\u591a\u6761\uff09\u6267\u884c\u547d\u4ee4\u7b80\u5355\u7684\uff0c\u66f4\u52a0\u5feb\u901f\u7684\u53d1\u9001\u7ed9\u670d\u52a1\u5668\uff0c\u4f46\u662f\u6ca1\u6709\u4efb\u4f55\u539f\u5b50\u6027\u7684\u4fdd\u8bc1<br \/>\ndiscard:\u5220\u9664\u4e00\u4e2a\u4e8b\u52a1<br \/>\n\u8fd4\u56de\u503c<br \/>\nmulti()\uff0c\u8fd4\u56de\u4e00\u4e2aredis\u5bf9\u8c61\uff0c\u5e76\u8fdb\u5165multi-mode\u6a21\u5f0f\uff0c\u4e00\u65e6\u8fdb\u5165multi-mode\u6a21\u5f0f\uff0c\u4ee5\u540e\u8c03\u7528\u7684\u6240\u6709\u65b9\u6cd5\u90fd\u4f1a\u8fd4\u56de\u76f8\u540c\u7684\u5bf9\u8c61\uff0c\u53ea\u5230exec(\uff09\u65b9\u6cd5\u88ab\u8c03\u7528\u3002<\/p>\n<p>watch, unwatch \uff08\u4ee3\u7801\u6d4b\u8bd5\u540e\uff0c\u4e0d\u80fd\u8fbe\u5230\u6240\u8bf4\u7684\u6548\u679c\uff09<br \/>\n\u76d1\u6d4b\u4e00\u4e2akey\u7684\u503c\u662f\u5426\u88ab\u5176\u5b83\u7684\u7a0b\u5e8f\u66f4\u6539\u3002\u5982\u679c\u8fd9\u4e2akey\u5728watch \u548c exec \uff08\u65b9\u6cd5\uff09\u95f4\u88ab\u4fee\u6539\uff0c\u8fd9\u4e2a MULTI\/EXEC \u4e8b\u52a1\u7684\u6267\u884c\u5c06\u5931\u8d25\uff08return false\uff09<br \/>\nunwatch  \u53d6\u6d88\u88ab\u8fd9\u4e2a\u7a0b\u5e8f\u76d1\u6d4b\u7684\u6240\u6709key<br \/>\n\u53c2\u6570\uff0c\u4e00\u5bf9key\u7684\u5217\u8868<br \/>\n$redis->watch(&#8216;x&#8217;);<\/p>\n<p>$ret = $redis->multi() ->incr(&#8216;x&#8217;) ->exec();<\/p>\n<p>subscribe *<br \/>\n\u65b9\u6cd5\u56de\u8c03\u3002\u6ce8\u610f\uff0c\u8be5\u65b9\u6cd5\u53ef\u80fd\u5728\u672a\u6765\u91cc\u53d1\u751f\u6539\u53d8<\/p>\n<p>publish *<br \/>\n\u53d1\u8868\u5185\u5bb9\u5230\u67d0\u4e00\u4e2a\u901a\u9053\u3002\u6ce8\u610f\uff0c\u8be5\u65b9\u6cd5\u53ef\u80fd\u5728\u672a\u6765\u91cc\u53d1\u751f\u6539\u53d8<\/p>\n<p>exists<br \/>\n\u5224\u65adkey\u662f\u5426\u5b58\u5728\u3002\u5b58\u5728 true \u4e0d\u5728 false<\/p>\n<p>incr, incrBy<br \/>\nkey\u4e2d\u7684\u503c\u8fdb\u884c\u81ea\u589e1\uff0c\u5982\u679c\u586b\u5199\u4e86\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff0c\u8005\u81ea\u589e\u7b2c\u4e8c\u4e2a\u53c2\u6570\u6240\u586b\u7684\u503c<br \/>\n$redis->incr(&#8216;key1&#8217;);<br \/>\n$redis->incrBy(&#8216;key1&#8217;, 10);<\/p>\n<p>decr, decrBy<br \/>\n\u505a\u51cf\u6cd5\uff0c\u4f7f\u7528\u65b9\u6cd5\u540cincr<\/p>\n<p>getMultiple<br \/>\n\u4f20\u53c2<br \/>\n\u7531key\u7ec4\u6210\u7684\u6570\u7ec4<br \/>\n\u8fd4\u56de\u53c2\u6570<br \/>\n\u5982\u679ckey\u5b58\u5728\u8fd4\u56devalue\uff0c\u4e0d\u5b58\u5728\u8fd4\u56defalse<br \/>\n$redis->set(&#8216;key1&#8217;, &#8216;value1&#8217;); $redis->set(&#8216;key2&#8217;, &#8216;value2&#8217;); $redis->set(&#8216;key3&#8217;, &#8216;value3&#8217;); $redis->getMultiple(array(&#8216;key1&#8217;, &#8216;key2&#8217;, &#8216;key3&#8217;));<br \/>\n$redis->lRem(&#8216;key1&#8217;, &#8216;A&#8217;, 2);<br \/>\n$redis->lRange(&#8216;key1&#8217;, 0, -1);<\/p>\n<p>list\u76f8\u5173\u64cd\u4f5c<br \/>\nlPush<br \/>\n$redis->lPush(key, value);<br \/>\n\u5728\u540d\u79f0\u4e3akey\u7684list\u5de6\u8fb9\uff08\u5934\uff09\u6dfb\u52a0\u4e00\u4e2a\u503c\u4e3avalue\u7684 \u5143\u7d20<\/p>\n<p>rPush<br \/>\n$redis->rPush(key, value);<br \/>\n\u5728\u540d\u79f0\u4e3akey\u7684list\u53f3\u8fb9\uff08\u5c3e\uff09\u6dfb\u52a0\u4e00\u4e2a\u503c\u4e3avalue\u7684 \u5143\u7d20<\/p>\n<p>lPushx\/rPushx<br \/>\n$redis->lPushx(key, value);<br \/>\n\u5728\u540d\u79f0\u4e3akey\u7684list\u5de6\u8fb9(\u5934)\/\u53f3\u8fb9\uff08\u5c3e\uff09\u6dfb\u52a0\u4e00\u4e2a\u503c\u4e3avalue\u7684\u5143\u7d20,\u5982\u679cvalue\u5df2\u7ecf\u5b58\u5728\uff0c\u5219\u4e0d\u6dfb\u52a0<\/p>\n<p>lPop\/rPop<br \/>\n$redis->lPop(&#8216;key&#8217;);<br \/>\n\u8f93\u51fa\u540d\u79f0\u4e3akey\u7684list\u5de6(\u5934)\u8d77\/\u53f3\uff08\u5c3e\uff09\u8d77\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20\uff0c\u5220\u9664\u8be5\u5143\u7d20<\/p>\n<p>blPop\/brPop<br \/>\n$redis->blPop(&#8216;key1&#8217;, &#8216;key2&#8217;, 10);<br \/>\nlpop\u547d\u4ee4\u7684block\u7248\u672c\u3002\u5373\u5f53timeout\u4e3a0\u65f6\uff0c\u82e5\u9047\u5230\u540d\u79f0\u4e3akey i\u7684list\u4e0d\u5b58\u5728\u6216\u8be5list\u4e3a\u7a7a\uff0c\u5219\u547d\u4ee4\u7ed3\u675f\u3002\u5982\u679ctimeout>0\uff0c\u5219\u9047\u5230\u4e0a\u8ff0\u60c5\u51b5\u65f6\uff0c\u7b49\u5f85timeout\u79d2\uff0c\u5982\u679c\u95ee\u9898\u6ca1\u6709\u89e3\u51b3\uff0c\u5219\u5bf9keyi+1\u5f00\u59cb\u7684list\u6267\u884cpop\u64cd\u4f5c<\/p>\n<p>lSize<br \/>\n$redis->lSize(&#8216;key&#8217;);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684list\u6709\u591a\u5c11\u4e2a\u5143\u7d20<\/p>\n<p>lIndex, lGet<br \/>\n$redis->lGet(&#8216;key&#8217;, 0);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684list\u4e2dindex\u4f4d\u7f6e\u7684\u5143\u7d20<\/p>\n<p>lSet<br \/>\n$redis->lSet(&#8216;key&#8217;, 0, &#8216;X&#8217;);<br \/>\n\u7ed9\u540d\u79f0\u4e3akey\u7684list\u4e2dindex\u4f4d\u7f6e\u7684\u5143\u7d20\u8d4b\u503c\u4e3avalue<\/p>\n<p>lRange, lGetRange<br \/>\n$redis->lRange(&#8216;key1&#8217;, 0, -1);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684list\u4e2dstart\u81f3end\u4e4b\u95f4\u7684\u5143\u7d20\uff08end\u4e3a -1 \uff0c\u8fd4\u56de\u6240\u6709\uff09<\/p>\n<p>lTrim, listTrim<br \/>\n$redis->lTrim(&#8216;key&#8217;, start, end);<br \/>\n\u622a\u53d6\u540d\u79f0\u4e3akey\u7684list\uff0c\u4fdd\u7559start\u81f3end\u4e4b\u95f4\u7684\u5143\u7d20<\/p>\n<p>lRem, lRemove<br \/>\n$redis->lRem(&#8216;key&#8217;, &#8216;A&#8217;, 2);<br \/>\n\u5220\u9664count\u4e2a\u540d\u79f0\u4e3akey\u7684list\u4e2d\u503c\u4e3avalue\u7684\u5143\u7d20\u3002count\u4e3a0\uff0c\u5220\u9664\u6240\u6709\u503c\u4e3avalue\u7684\u5143\u7d20\uff0ccount>0\u4ece\u5934\u81f3\u5c3e\u5220\u9664count\u4e2a\u503c\u4e3avalue\u7684\u5143\u7d20\uff0ccount<0\u4ece\u5c3e\u5230\u5934\u5220\u9664|count|\u4e2a\u503c\u4e3avalue\u7684\u5143\u7d20\n\nlInsert\n\u5728\u540d\u79f0\u4e3a\u4e3akey\u7684list\u4e2d\uff0c\u627e\u5230\u503c\u4e3apivot \u7684value\uff0c\u5e76\u6839\u636e\u53c2\u6570Redis::BEFORE | Redis::AFTER\uff0c\u6765\u786e\u5b9a\uff0cnewvalue \u662f\u653e\u5728 pivot \u7684\u524d\u9762\uff0c\u6216\u8005\u540e\u9762\u3002\u5982\u679ckey\u4e0d\u5b58\u5728\uff0c\u4e0d\u4f1a\u63d2\u5165\uff0c\u5982\u679c pivot\u4e0d\u5b58\u5728\uff0creturn -1\n$redis->delete(&#8216;key1&#8217;); $redis->lInsert(&#8216;key1&#8217;, Redis::AFTER, &#8216;A&#8217;, &#8216;X&#8217;); $redis->lPush(&#8216;key1&#8217;, &#8216;A&#8217;); $redis->lPush(&#8216;key1&#8217;, &#8216;B&#8217;); $redis->lPush(&#8216;key1&#8217;, &#8216;C&#8217;); $redis->lInsert(&#8216;key1&#8217;, Redis::BEFORE, &#8216;C&#8217;, &#8216;X&#8217;);<br \/>\n$redis->lRange(&#8216;key1&#8217;, 0, -1);<br \/>\n$redis->lInsert(&#8216;key1&#8217;, Redis::AFTER, &#8216;C&#8217;, &#8216;Y&#8217;);<br \/>\n$redis->lRange(&#8216;key1&#8217;, 0, -1);<br \/>\n$redis->lInsert(&#8216;key1&#8217;, Redis::AFTER, &#8216;W&#8217;, &#8216;value&#8217;);<\/p>\n<p>rpoplpush<br \/>\n\u8fd4\u56de\u5e76\u5220\u9664\u540d\u79f0\u4e3asrckey\u7684list\u7684\u5c3e\u5143\u7d20\uff0c\u5e76\u5c06\u8be5\u5143\u7d20\u6dfb\u52a0\u5230\u540d\u79f0\u4e3adstkey\u7684list\u7684\u5934\u90e8<br \/>\n$redis->delete(&#8216;x&#8217;, &#8216;y&#8217;);<br \/>\n$redis->lPush(&#8216;x&#8217;, &#8216;abc&#8217;); $redis->lPush(&#8216;x&#8217;, &#8216;def&#8217;); $redis->lPush(&#8216;y&#8217;, &#8216;123&#8217;); $redis->lPush(&#8216;y&#8217;, &#8216;456&#8217;); \/\/ move the last of x to the front of y. var_dump($redis->rpoplpush(&#8216;x&#8217;, &#8216;y&#8217;));<br \/>\nvar_dump($redis->lRange(&#8216;x&#8217;, 0, -1));<br \/>\nvar_dump($redis->lRange(&#8216;y&#8217;, 0, -1)); <\/p>\n<p>string(3) &#8220;abc&#8221;<br \/>\narray(1) { [0]=> string(3) &#8220;def&#8221; }<br \/>\narray(3) { [0]=> string(3) &#8220;abc&#8221; [1]=> string(3) &#8220;456&#8221; [2]=> string(3) &#8220;123&#8221; }<\/p>\n<p>SET\u64cd\u4f5c\u76f8\u5173<br \/>\nsAdd<br \/>\n\u5411\u540d\u79f0\u4e3akey\u7684set\u4e2d\u6dfb\u52a0\u5143\u7d20value,\u5982\u679cvalue\u5b58\u5728\uff0c\u4e0d\u5199\u5165\uff0creturn false<br \/>\n$redis->sAdd(key , value);<\/p>\n<p>sRem, sRemove<br \/>\n\u5220\u9664\u540d\u79f0\u4e3akey\u7684set\u4e2d\u7684\u5143\u7d20value<br \/>\n$redis->sAdd(&#8216;key1&#8217; , &#8216;set1&#8217;);<br \/>\n$redis->sAdd(&#8216;key1&#8217; , &#8216;set2&#8217;);<br \/>\n$redis->sAdd(&#8216;key1&#8217; , &#8216;set3&#8217;);<br \/>\n$redis->sRem(&#8216;key1&#8217;, &#8216;set2&#8217;);<\/p>\n<p>sMove<br \/>\n\u5c06value\u5143\u7d20\u4ece\u540d\u79f0\u4e3asrckey\u7684\u96c6\u5408\u79fb\u5230\u540d\u79f0\u4e3adstkey\u7684\u96c6\u5408<br \/>\n$redis->sMove(seckey, dstkey, value);<\/p>\n<p>sIsMember, sContains<br \/>\n\u540d\u79f0\u4e3akey\u7684\u96c6\u5408\u4e2d\u67e5\u627e\u662f\u5426\u6709value\u5143\u7d20\uff0c\u6709ture \u6ca1\u6709 false<br \/>\n$redis->sIsMember(key, value);<\/p>\n<p>sCard, sSize<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684set\u7684\u5143\u7d20\u4e2a\u6570<\/p>\n<p>sPop<br \/>\n\u968f\u673a\u8fd4\u56de\u5e76\u5220\u9664\u540d\u79f0\u4e3akey\u7684set\u4e2d\u4e00\u4e2a\u5143\u7d20<\/p>\n<p>sRandMember<br \/>\n\u968f\u673a\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684set\u4e2d\u4e00\u4e2a\u5143\u7d20\uff0c\u4e0d\u5220\u9664<\/p>\n<p>sInter<br \/>\n\u6c42\u4ea4\u96c6<\/p>\n<p>sInterStore<br \/>\n\u6c42\u4ea4\u96c6\u5e76\u5c06\u4ea4\u96c6\u4fdd\u5b58\u5230output\u7684\u96c6\u5408<br \/>\n$redis->sInterStore(&#8216;output&#8217;, &#8216;key1&#8217;, &#8216;key2&#8217;, &#8216;key3&#8217;)<\/p>\n<p>sUnion<br \/>\n\u6c42\u5e76\u96c6<br \/>\n$redis->sUnion(&#8216;s0&#8217;, &#8216;s1&#8217;, &#8216;s2&#8217;);<br \/>\ns0,s1,s2 \u540c\u65f6\u6c42\u5e76\u96c6<\/p>\n<p>sUnionStore<br \/>\n\u6c42\u5e76\u96c6\u5e76\u5c06\u5e76\u96c6\u4fdd\u5b58\u5230output\u7684\u96c6\u5408<br \/>\n$redis->sUnionStore(&#8216;output&#8217;, &#8216;key1&#8217;, &#8216;key2&#8217;, &#8216;key3&#8217;)\uff1b<\/p>\n<p>sDiff<br \/>\n\u6c42\u5dee\u96c6<\/p>\n<p>sDiffStore<br \/>\n\u6c42\u5dee\u96c6\u5e76\u5c06\u5dee\u96c6\u4fdd\u5b58\u5230output\u7684\u96c6\u5408<\/p>\n<p>sMembers, sGetMembers<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684set\u7684\u6240\u6709\u5143\u7d20<\/p>\n<p>sort<br \/>\n\u6392\u5e8f\uff0c\u5206\u9875\u7b49<br \/>\n\u53c2\u6570<br \/>\n&#8216;by&#8217; => &#8216;some_pattern_*&#8217;,<br \/>\n&#8216;limit&#8217; => array(0, 1),<br \/>\n&#8216;get&#8217; => &#8216;some_other_pattern_*&#8217; or an array of patterns,<br \/>\n&#8216;sort&#8217; => &#8216;asc&#8217; or &#8216;desc&#8217;,<br \/>\n&#8216;alpha&#8217; => TRUE,<br \/>\n&#8216;store&#8217; => &#8216;external-key&#8217;<br \/>\n\u4f8b\u5b50<br \/>\n$redis->delete(&#8216;s&#8217;); $redis->sadd(&#8216;s&#8217;, 5); $redis->sadd(&#8216;s&#8217;, 4); $redis->sadd(&#8216;s&#8217;, 2); $redis->sadd(&#8216;s&#8217;, 1); $redis->sadd(&#8216;s&#8217;, 3);<br \/>\nvar_dump($redis->sort(&#8216;s&#8217;)); \/\/ 1,2,3,4,5<br \/>\nvar_dump($redis->sort(&#8216;s&#8217;, array(&#8216;sort&#8217; => &#8216;desc&#8217;))); \/\/ 5,4,3,2,1<br \/>\nvar_dump($redis->sort(&#8216;s&#8217;, array(&#8216;sort&#8217; => &#8216;desc&#8217;, &#8216;store&#8217; => &#8216;out&#8217;))); \/\/ (int)5<\/p>\n<p>string\u547d\u4ee4<br \/>\ngetSet<br \/>\n\u8fd4\u56de\u539f\u6765key\u4e2d\u7684\u503c\uff0c\u5e76\u5c06value\u5199\u5165key<br \/>\n$redis->set(&#8216;x&#8217;, &#8217;42&#8217;);<br \/>\n$exValue = $redis->getSet(&#8216;x&#8217;, &#8216;lol&#8217;); \/\/ return &#8217;42&#8217;, replaces x by &#8216;lol&#8217;<br \/>\n$newValue = $redis->get(&#8216;x&#8217;)&#8217; \/\/ return &#8216;lol&#8217;<\/p>\n<p>append<br \/>\nstring\uff0c\u540d\u79f0\u4e3akey\u7684string\u7684\u503c\u5728\u540e\u9762\u52a0\u4e0avalue<br \/>\n$redis->set(&#8216;key&#8217;, &#8216;value1&#8217;);<br \/>\n$redis->append(&#8216;key&#8217;, &#8216;value2&#8217;);<br \/>\n$redis->get(&#8216;key&#8217;);<\/p>\n<p>getRange \uff08\u65b9\u6cd5\u4e0d\u5b58\u5728\uff09<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684string\u4e2dstart\u81f3end\u4e4b\u95f4\u7684\u5b57\u7b26<br \/>\n$redis->set(&#8216;key&#8217;, &#8216;string value&#8217;);<br \/>\n$redis->getRange(&#8216;key&#8217;, 0, 5);<br \/>\n$redis->getRange(&#8216;key&#8217;, -5, -1);<\/p>\n<p>setRange \uff08\u65b9\u6cd5\u4e0d\u5b58\u5728\uff09<br \/>\n\u6539\u53d8key\u7684string\u4e2dstart\u81f3end\u4e4b\u95f4\u7684\u5b57\u7b26\u4e3avalue<br \/>\n$redis->set(&#8216;key&#8217;, &#8216;Hello world&#8217;);<br \/>\n$redis->setRange(&#8216;key&#8217;, 6, &#8220;redis&#8221;);<br \/>\n$redis->get(&#8216;key&#8217;);<\/p>\n<p>strlen<br \/>\n\u5f97\u5230key\u7684string\u7684\u957f\u5ea6<br \/>\n$redis->strlen(&#8216;key&#8217;);<\/p>\n<p>getBit\/setBit<br \/>\n\u8fd4\u56de2\u8fdb\u5236\u4fe1\u606f<\/p>\n<p>zset\uff08sorted set\uff09\u64cd\u4f5c\u76f8\u5173<br \/>\nzAdd(key, score, member)\uff1a\u5411\u540d\u79f0\u4e3akey\u7684zset\u4e2d\u6dfb\u52a0\u5143\u7d20member\uff0cscore\u7528\u4e8e\u6392\u5e8f\u3002\u5982\u679c\u8be5\u5143\u7d20\u5df2\u7ecf\u5b58\u5728\uff0c\u5219\u6839\u636escore\u66f4\u65b0\u8be5\u5143\u7d20\u7684\u987a\u5e8f\u3002<br \/>\n$redis->zAdd(&#8216;key&#8217;, 1, &#8216;val1&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 0, &#8216;val0&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 5, &#8216;val5&#8217;);<br \/>\n$redis->zRange(&#8216;key&#8217;, 0, -1); \/\/ array(val0, val1, val5)<\/p>\n<p>zRange(key, start, end,withscores)\uff1a\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\uff08\u5143\u7d20\u5df2\u6309score\u4ece\u5c0f\u5230\u5927\u6392\u5e8f\uff09\u4e2d\u7684index\u4ecestart\u5230end\u7684\u6240\u6709\u5143\u7d20<br \/>\n$redis->zAdd(&#8216;key1&#8217;, 0, &#8216;val0&#8217;);<br \/>\n$redis->zAdd(&#8216;key1&#8217;, 2, &#8216;val2&#8217;);<br \/>\n$redis->zAdd(&#8216;key1&#8217;, 10, &#8216;val10&#8217;);<br \/>\n$redis->zRange(&#8216;key1&#8217;, 0, -1); \/\/ with scores $redis->zRange(&#8216;key1&#8217;, 0, -1, true);<\/p>\n<p>zDelete, zRem<br \/>\nzRem(key, member) \uff1a\u5220\u9664\u540d\u79f0\u4e3akey\u7684zset\u4e2d\u7684\u5143\u7d20member<br \/>\n$redis->zAdd(&#8216;key&#8217;, 0, &#8216;val0&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 2, &#8216;val2&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 10, &#8216;val10&#8217;);<br \/>\n$redis->zDelete(&#8216;key&#8217;, &#8216;val2&#8217;);<br \/>\n$redis->zRange(&#8216;key&#8217;, 0, -1); <\/p>\n<p>zRevRange(key, start, end,withscores)\uff1a\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\uff08\u5143\u7d20\u5df2\u6309score\u4ece\u5927\u5230\u5c0f\u6392\u5e8f\uff09\u4e2d\u7684index\u4ecestart\u5230end\u7684\u6240\u6709\u5143\u7d20.withscores: \u662f\u5426\u8f93\u51fasocre\u7684\u503c\uff0c\u9ed8\u8ba4false\uff0c\u4e0d\u8f93\u51fa<br \/>\n$redis->zAdd(&#8216;key&#8217;, 0, &#8216;val0&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 2, &#8216;val2&#8217;);<br \/>\n$redis->zAdd(&#8216;key&#8217;, 10, &#8216;val10&#8217;);<br \/>\n$redis->zRevRange(&#8216;key&#8217;, 0, -1); \/\/ with scores $redis->zRevRange(&#8216;key&#8217;, 0, -1, true);<\/p>\n<p>zRangeByScore, zRevRangeByScore<br \/>\n$redis->zRangeByScore(key, star, end, array(withscores\uff0c limit ));<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\u4e2dscore >= star\u4e14score <= end\u7684\u6240\u6709\u5143\u7d20\n\nzCount\n$redis->zCount(key, star, end);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\u4e2dscore >= star\u4e14score <= end\u7684\u6240\u6709\u5143\u7d20\u7684\u4e2a\u6570\n\nzRemRangeByScore, zDeleteRangeByScore\n$redis->zRemRangeByScore(&#8216;key&#8217;, star, end);<br \/>\n\u5220\u9664\u540d\u79f0\u4e3akey\u7684zset\u4e2dscore >= star\u4e14score <= end\u7684\u6240\u6709\u5143\u7d20\uff0c\u8fd4\u56de\u5220\u9664\u4e2a\u6570\n\nzSize, zCard\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\u7684\u6240\u6709\u5143\u7d20\u7684\u4e2a\u6570\n\nzScore\n$redis->zScore(key, val2);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\u4e2d\u5143\u7d20val2\u7684score<\/p>\n<p>zRank, zRevRank<br \/>\n$redis->zRevRank(key, val);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684zset\uff08\u5143\u7d20\u5df2\u6309score\u4ece\u5c0f\u5230\u5927\u6392\u5e8f\uff09\u4e2dval\u5143\u7d20\u7684rank\uff08\u5373index\uff0c\u4ece0\u5f00\u59cb\uff09\uff0c\u82e5\u6ca1\u6709val\u5143\u7d20\uff0c\u8fd4\u56de\u201cnull\u201d\u3002zRevRank \u662f\u4ece\u5927\u5230\u5c0f\u6392\u5e8f<\/p>\n<p>zIncrBy<br \/>\n$redis->zIncrBy(&#8216;key&#8217;, increment, &#8216;member&#8217;);<br \/>\n\u5982\u679c\u5728\u540d\u79f0\u4e3akey\u7684zset\u4e2d\u5df2\u7ecf\u5b58\u5728\u5143\u7d20member\uff0c\u5219\u8be5\u5143\u7d20\u7684score\u589e\u52a0increment\uff1b\u5426\u5219\u5411\u96c6\u5408\u4e2d\u6dfb\u52a0\u8be5\u5143\u7d20\uff0c\u5176score\u7684\u503c\u4e3aincrement<\/p>\n<p>zUnion\/zInter<br \/>\n\u53c2\u6570<br \/>\nkeyOutput<br \/>\narrayZSetKeys<br \/>\narrayWeights<br \/>\naggregateFunction Either &#8220;SUM&#8221;, &#8220;MIN&#8221;, or &#8220;MAX&#8221;: defines the behaviour to use on duplicate entries during the zUnion.<br \/>\n\u5bf9N\u4e2azset\u6c42\u5e76\u96c6\u548c\u4ea4\u96c6\uff0c\u5e76\u5c06\u6700\u540e\u7684\u96c6\u5408\u4fdd\u5b58\u5728dstkeyN\u4e2d\u3002\u5bf9\u4e8e\u96c6\u5408\u4e2d\u6bcf\u4e00\u4e2a\u5143\u7d20\u7684score\uff0c\u5728\u8fdb\u884cAGGREGATE\u8fd0\u7b97\u524d\uff0c\u90fd\u8981\u4e58\u4ee5\u5bf9\u4e8e\u7684WEIGHT\u53c2\u6570\u3002\u5982\u679c\u6ca1\u6709\u63d0\u4f9bWEIGHT\uff0c\u9ed8\u8ba4\u4e3a1\u3002\u9ed8\u8ba4\u7684AGGREGATE\u662fSUM\uff0c\u5373\u7ed3\u679c\u96c6\u5408\u4e2d\u5143\u7d20\u7684score\u662f\u6240\u6709\u96c6\u5408\u5bf9\u5e94\u5143\u7d20\u8fdb\u884cSUM\u8fd0\u7b97\u7684\u503c\uff0c\u800cMIN\u548cMAX\u662f\u6307\uff0c\u7ed3\u679c\u96c6\u5408\u4e2d\u5143\u7d20\u7684score\u662f\u6240\u6709\u96c6\u5408\u5bf9\u5e94\u5143\u7d20\u4e2d\u6700\u5c0f\u503c\u548c\u6700\u5927\u503c\u3002<\/p>\n<p>Hash\u64cd\u4f5c<br \/>\nhSet<br \/>\n$redis->hSet(&#8216;h&#8217;, &#8216;key1&#8217;, &#8216;hello&#8217;);<br \/>\n\u5411\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u6dfb\u52a0\u5143\u7d20key1\u2014>hello<\/p>\n<p>hGet<br \/>\n$redis->hGet(&#8216;h&#8217;, &#8216;key1&#8217;);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3ah\u7684hash\u4e2dkey1\u5bf9\u5e94\u7684value\uff08hello\uff09<\/p>\n<p>hLen<br \/>\n$redis->hLen(&#8216;h&#8217;);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u5143\u7d20\u4e2a\u6570<\/p>\n<p>hDel<br \/>\n$redis->hDel(&#8216;h&#8217;, &#8216;key1&#8217;);<br \/>\n\u5220\u9664\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u952e\u4e3akey1\u7684\u57df<\/p>\n<p>hKeys<br \/>\n$redis->hKeys(&#8216;h&#8217;);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3akey\u7684hash\u4e2d\u6240\u6709\u952e<\/p>\n<p>hVals<br \/>\n$redis->hVals(&#8216;h&#8217;)<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u6240\u6709\u952e\u5bf9\u5e94\u7684value<\/p>\n<p>hGetAll<br \/>\n$redis->hGetAll(&#8216;h&#8217;);<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u6240\u6709\u7684\u952e\uff08field\uff09\u53ca\u5176\u5bf9\u5e94\u7684value<\/p>\n<p>hExists<br \/>\n$redis->hExists(&#8216;h&#8217;, &#8216;a&#8217;);<br \/>\n\u540d\u79f0\u4e3ah\u7684hash\u4e2d\u662f\u5426\u5b58\u5728\u952e\u540d\u5b57\u4e3aa\u7684\u57df<\/p>\n<p>hIncrBy<br \/>\n$redis->hIncrBy(&#8216;h&#8217;, &#8216;x&#8217;, 2);<br \/>\n\u5c06\u540d\u79f0\u4e3ah\u7684hash\u4e2dx\u7684value\u589e\u52a02<\/p>\n<p>hMset<br \/>\n$redis->hMset(&#8216;user:1&#8217;, array(&#8216;name&#8217; => &#8216;Joe&#8217;, &#8216;salary&#8217; => 2000));<br \/>\n\u5411\u540d\u79f0\u4e3akey\u7684hash\u4e2d\u6279\u91cf\u6dfb\u52a0\u5143\u7d20<\/p>\n<p>hMGet<br \/>\n$redis->hmGet(&#8216;h&#8217;, array(&#8216;field1&#8217;, &#8216;field2&#8217;));<br \/>\n\u8fd4\u56de\u540d\u79f0\u4e3ah\u7684hash\u4e2dfield1,field2\u5bf9\u5e94\u7684value<\/p>\n<p>redis \u64cd\u4f5c\u76f8\u5173<br \/>\nflushDB<br \/>\n\u6e05\u7a7a\u5f53\u524d\u6570\u636e\u5e93<\/p>\n<p>flushAll<br \/>\n\u6e05\u7a7a\u6240\u6709\u6570\u636e\u5e93<\/p>\n<p>randomKey<br \/>\n\u968f\u673a\u8fd4\u56dekey\u7a7a\u95f4\u7684\u4e00\u4e2akey<br \/>\n$key = $redis->randomKey();<\/p>\n<p>select<br \/>\n\u9009\u62e9\u4e00\u4e2a\u6570\u636e\u5e93<br \/>\nmove<br \/>\n\u8f6c\u79fb\u4e00\u4e2akey\u5230\u53e6\u5916\u4e00\u4e2a\u6570\u636e\u5e93<br \/>\n$redis->select(0); \/\/ switch to DB 0<br \/>\n$redis->set(&#8216;x&#8217;, &#8217;42&#8217;); \/\/ write 42 to x<br \/>\n$redis->move(&#8216;x&#8217;, 1); \/\/ move to DB 1<br \/>\n$redis->select(1); \/\/ switch to DB 1<br \/>\n$redis->get(&#8216;x&#8217;); \/\/ will return 42<\/p>\n<p>rename, renameKey<br \/>\n\u7ed9key\u91cd\u547d\u540d<br \/>\n$redis->set(&#8216;x&#8217;, &#8217;42&#8217;);<br \/>\n$redis->rename(&#8216;x&#8217;, &#8216;y&#8217;);<br \/>\n$redis->get(&#8216;y&#8217;); \/\/ \u2192 42<br \/>\n$redis->get(&#8216;x&#8217;); \/\/ \u2192 `FALSE`<\/p>\n<p>renameNx<br \/>\n\u4e0eremane\u7c7b\u4f3c\uff0c\u4f46\u662f\uff0c\u5982\u679c\u91cd\u65b0\u547d\u540d\u7684\u540d\u5b57\u5df2\u7ecf\u5b58\u5728\uff0c\u4e0d\u4f1a\u66ff\u6362\u6210\u529f<\/p>\n<p>setTimeout, expire<br \/>\n\u8bbe\u5b9a\u4e00\u4e2akey\u7684\u6d3b\u52a8\u65f6\u95f4\uff08s\uff09<br \/>\n$redis->setTimeout(&#8216;x&#8217;, 3);<\/p>\n<p>expireAt<br \/>\nkey\u5b58\u6d3b\u5230\u4e00\u4e2aunix\u65f6\u95f4\u6233\u65f6\u95f4<br \/>\n$redis->expireAt(&#8216;x&#8217;, time() + 3);<\/p>\n<p>keys, getKeys<br \/>\n\u8fd4\u56de\u6ee1\u8db3\u7ed9\u5b9apattern\u7684\u6240\u6709key<br \/>\n$keyWithUserPrefix = $redis->keys(&#8216;user*&#8217;);<\/p>\n<p>dbSize<br \/>\n\u67e5\u770b\u73b0\u5728\u6570\u636e\u5e93\u6709\u591a\u5c11key<br \/>\n$count = $redis->dbSize();<\/p>\n<p>auth<br \/>\n\u5bc6\u7801\u8ba4\u8bc1<br \/>\n$redis->auth(&#8216;foobared&#8217;);<\/p>\n<p>bgrewriteaof<br \/>\n\u4f7f\u7528aof\u6765\u8fdb\u884c\u6570\u636e\u5e93\u6301\u4e45\u5316<br \/>\n$redis->bgrewriteaof();<\/p>\n<p>slaveof<br \/>\n\u9009\u62e9\u4ece\u670d\u52a1\u5668<br \/>\n$redis->slaveof(&#8216;10.0.1.7&#8217;, 6379);<\/p>\n<p>save<br \/>\n\u5c06\u6570\u636e\u540c\u6b65\u4fdd\u5b58\u5230\u78c1\u76d8<\/p>\n<p>bgsave<br \/>\n\u5c06\u6570\u636e\u5f02\u6b65\u4fdd\u5b58\u5230\u78c1\u76d8<\/p>\n<p>lastSave<br \/>\n\u8fd4\u56de\u4e0a\u6b21\u6210\u529f\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u7684Unix\u65f6\u6233<\/p>\n<p>info<br \/>\n\u8fd4\u56deredis\u7684\u7248\u672c\u4fe1\u606f\u7b49\u8be6\u60c5<\/p>\n<p>type<br \/>\n\u8fd4\u56dekey\u7684\u7c7b\u578b\u503c<br \/>\nstring: Redis::REDIS_STRING<br \/>\nset: Redis::REDIS_SET<br \/>\nlist: Redis::REDIS_LIST<br \/>\nzset: Redis::REDIS_ZSET<br \/>\nhash: Redis::REDIS_HASH<br \/>\nother: Redis::REDIS_NOT_FOUND<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Redis\u670d\u52a1\u5668\uff1a \u5b89\u88c5redis\uff1asudo apt-get ins&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,18],"tags":[36,160,115],"class_list":["post-996","post","type-post","status-publish","format-standard","hentry","category-Linux","category-Php","tag-php-2","tag-redis","tag-115"],"_links":{"self":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=996"}],"version-history":[{"count":1,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/996\/revisions"}],"predecessor-version":[{"id":997,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/996\/revisions\/997"}],"wp:attachment":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}