ホームページ >バックエンド開発 >PHPチュートリアル >PHP Redis、phpredis_PHP チュートリアル
<span> 1</span> <?php <span>if</span> (!<span>define</span>('BASEPATH')) <span>exit</span>('直接スクリプトアクセスは許可されていません'<span>); </span><span> 2</span> <span>クラス</span><span> マイレディス </span><span> 3</span> <span>{ </span><span> 4</span> <span>//</span><span>redis全て已知コマンド: </span><span> 5</span> <span> //append,auth,bgrewriteaof,bgsave,bitcount,bitop,blpop,brpop,brpoplpush,client-kill,client-list,client-getname, client-setname,config-get,config-set,config -resetstat、dbsize、debug-object、debug-segfault、decr、decrby、del、discard、dump、echo、eval、evalsha、exec、exists、expire、expireat、flushall、flushdb、get、getbit、getrange、getset、hdel ,hexists,hget, hgetall,hincrby,hincrbyfloat,hkeys,hlen,hmget,hmset,hset,hsetnx,hvals,incr,incrby,incrbyfloat,info,keys,lastsave, lindex,linsert,llen,lpop,lpush,lpushx,lrange 、lrem、lset、ltrim、mget、移行、監視、移動、mset、msetnx、multi、object、persist、pexpire、pexpireat、pfadd、pfcount、pfmerge、ping、psetex、psubscribe、pttl、publish、punsubscribe、quit、randomkey ,rename,renamenx,restore, rpop,rpoplpush,rpush,rpushx,sadd,save,scard,script-exists,script-flush,script-kill,script-load,sdiff,sdiffstore, select,set,setbit,setex,setnx ,setrange,シャットダウン,sinter,sinterstore,sismember,slaveof,slowlog,smembers,smove,sort,spop,srandmember,srem,strlen,subscribe,sunion,sunionstore,sync,time,ttl,type,unsubscribe,unwatch,watch,zadd 、zcard、zcount、zincrby、zinterstore、zrange、zrangebyscore、zrank、zrem、zremrangebyrank、zremrangebyscore、zrevrange、zrevrangebyscore、zrevrank、zscore、zunionstore、pubsub、config-rewrite、client-pause、hscan、scan、sscan、zscan</span> <span> 6</span> <span> 7</span> <span>プライベート</span> <span>静的</span> <span>$redis</span><span>; </span><span> 8</span> <span> 9</span> <span>public</span> <span>function</span> __construct(<span>$arConfig</span> = <span>array</span>('host'=>'127.0.0.1', 'port'=>6379<span>)) </span><span> 10</span> <span> { </span><span> 11</span> <span>$this</span>->host = <span>$arConfig</span>['host'<span>]; </span><span> 12</span> <span>$this</span>->port = <span>$arConfig</span>['port'<span>]; </span><span> 13</span> self::<span>$redis</span> = <span>new</span><span> Redis(); </span><span> 14</span> self::<span>$redis</span>->connect(<span>$this</span>->ホスト, <span>$this</span>-><span>ポート); </span><span> 15</span> <span>return</span> self::<span>$redis</span><span>; </span><span> 16</span> <span> } </span><span> 17</span> <span> 18</span> <span>public</span> <span>function</span> __call(<span>$sMethod</span>, <span>$arParam</span><span>) </span><span> 19</span> <span> { </span><span> 20</span> <span>return</span> <span>call_user_func_array</span>(<span>array</span>(self::<span>$redis</span>, <span>$sMethod</span>), <span>$arParam</span><span>); </span><span> 21</span> <span> } </span><span> 22</span> <span> 23</span> <span>/*</span><span>****************** キー ********************</span><span>* /</span> <span>24</span> <span>25</span><span>/*</span><span>* </span><span> 26</span> <span> * すべての記号は、所定のモード パターンに適合するキーです。 </span><span> 27</span> <span> * KEYS * データベース内のすべてのキーを照合します。 </span><span> 28</span> <span> * KEYS h?llo 適合 hello 、 Hallo 、 hxllo など。 </span><span> 29</span> <span> * KEYS h*llo 適合 hllo と heeeeello など。 </span><span> 30</span> <span> * キー h[ae]llo は hello と hello に一致しますが、hillo は一致しません。 </span><span> 31</span> <span> *特殊記号用に区切られています。 </span><span> 32</span> <span> * @著者 zhaoyingnan 2015-10-16 17:33 </span><span> 33</span> <span> * @param string $sPattern 合わせモード </span><span> 34</span> <span> * @return 配列 </span><span> 35</span> <span> *</span><span>*/</span> <span> 36</span> <span>パブリック</span> <span>ファンクション</span> キー(<span>$sPattern</span> = '*'<span>) </span><span> 37</span> <span> { </span><span> 38</span> <span>//</span><span>echo $sPattern;</span> <span> 39</span> <span>return</span> self::<span>$redis</span>->keys(<span>$sPattern</span><span>); </span><span> 40</span> <span> } </span><span> 41</span> <span> 42</span> <span>/*</span><span>* </span><span> 43</span> <span> * 戻りキーが存在するかどうか。</span><span> 44</span> <span> * @author zhaoyingnan 2015-10-16 17:40 </span><span> 45</span> <span> * @param string $sKey 検出されるキー </span><span> 46</span> <span> * @return bool </span><span> 47</span> <span> *</span><span>*/</span> <span> 48</span> <span>パブリック</span> <span>関数</span>が存在します(<span>$sKey</span><span>) </span><span> 49</span> <span> { </span><span> 50</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 51</span> <span>return</span> self::<span>$redis</span>->exists(<span>$sKey</span><span>); </span><span> 52</span> <span> } </span><span> 53</span> <span> 54</span> <span>/*</span><span>* </span><span> 55</span> <span> * キーの有効期限を設定します。キーの有効期限が切れた場合、キーは自動的に削除されます。有効期限が設定されたキーは揮発性と呼ばれます。 </span><span> 56</span> <span> * キーの有効期限が切れる前にキーの有効期限を再更新したり、PERSIST コマンドを使用してキーの有効期限を削除したりできます。 </span><span> 57</span> <span> * @著者 zhaoyingnan 2015-10-16 17:46 </span><span> 58</span> <span> * @param string $sKey キー </span><span> 59</span> <span> * @param int $iSecond ライフタイム (秒) </span><span> 60</span> <span> * @return bool </span><span> 61</span> <span> *</span><span>*/</span> <span> 62</span> <span>public</span> <span>function</span> 期限切れ(<span>$sKey</span>, <span>$iSecond</span> = 60<span>) </span><span> 63</span> <span> { </span><span> 64</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 65</span> <span>return</span> self::<span>$redis</span>->expire(<span>$sKey</span>, <span>$iSecond</span><span>); </span><span> 66</span> <span> } </span><span> 67</span> <span> 68</span> <span>/*</span><span>* </span><span> 69</span> <span> * このコマンドは EXPIRE コマンドに似ていますが、鍵の生存時間を EXPIRE コマンドのような秒単位ではなくミリ秒単位で設定します。 </span><span> 70</span> <span> * @author zhaoyingnan 2015-10-19 16:00 </span><span> 71</span> <span> * @param string $sKey キー </span><span> 72</span> <span> * @param int $iSecond ライフタイム (秒) </span><span> 73</span> <span> * @return bool </span><span> 74</span> <span> *</span><span>*/</span> <span> 75</span> <span>public</span> <span>function</span> pexpire(<span>$sKey</span>, <span>$iミリ秒</span> = 60000<span>) </span><span> 76</span> <span> { </span><span> 77</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 78</span> <span>return</span> self::<span>$redis</span>->pexpire(<span>$sKey</span>, <span>$iミリ秒</span><span>); </span><span> 79</span> <span> } </span><span> 80</span> <span>81</span><span>/*</span><span>* </span><span> 82</span> <span> * EXPIREAT の機能は EXPIRE と似ており、どちらもキーの生存時間を設定するために使用されます。違いは、EXPIREAT コマンドで受け入れられる時間パラメータが UNIX タイムスタンプであることです。 </span><span> 83</span> <span> * @著者 zhaoyingnan 2015-10-16 18:03 </span><span> 84</span> <span> * @param string $sKey キー </span><span> 85</span> <span> * @param int $iUnixtimestamp UNIX タイムスタンプ (秒) </span><span> 86</span> <span> * @return bool </span><span> 87</span> <span> *</span><span>*/</span> <span> 88</span> <span>public</span> <span>function</span>期限切れ(<span>$sKey</span>, <span>$iUnixtimestamp</span><span>) </span><span> 89</span> <span> { </span><span> 90</span> <span>if</span>(!<span>$sKey</span> || !<span>$iUnixtimestamp</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 91</span> <span>return</span> self::<span>$redis</span>->expireat(<span>$sKey</span>, <span>$iUnixtimestamp</span><span>); </span><span> 92</span> <span> } </span><span>93</span> <span>94</span><span>/*</span><span>* </span><span> 95</span> <span> * PEXPIREAT このコマンドは EXPIREAT コマンドに似ていますが、キーの有効期限の UNIX タイムスタンプを EXPIREAT のような秒単位ではなくミリ秒単位で設定します。 </span><span> 96</span> <span> * EXPIREAT の機能は EXPIRE と似ており、両方ともキーの生存時間を設定するために使用されます。違いは、EXPIREAT コマンドで受け入れられる時間パラメータが UNIX タイムスタンプであることです。</span><span> 97</span> <span> * @著者 zhaoyingnan 2015-10-16 18:03 </span><span> 98</span> <span> * @param string $sKey キー </span><span> 99</span> <span> * @param int $iMilliseconds UNIX タイムスタンプ (ミリ秒) </span><span> 100</span> <span> * @return bool </span><span> 101</span> <span> *</span><span>*/</span> <span> 102</span> <span>public</span> <span>function</span> pexpireat(<span>$sKey</span>, <span>$iミリ秒</span><span>) </span><span> 103</span> <span> { </span><span> 104</span> <span>if</span>(!<span>$sKey</span> || !<span>$iミリ秒</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 105</span> <span>return</span> self::<span>$redis</span>->pexpireat(<span>$sKey</span>, <span>$iミリ秒</span><span>); </span><span> 106</span> <span> } </span><span> 107</span> <span>108</span><span>/*</span><span>* </span><span> 109</span> <span> * 指定されたキーの残りの生存時間 (TTL、生存時間) を秒単位で返します。 </span><span> 110</span> <span> * @著者 zhaoyingnan 2015-10-16 17:52 </span><span> 111</span> <span> * @param string $sKey キー </span><span> 112</span> <span> * @return int キーが存在しない場合は、-2 を返します。キーは存在するが、残りのライフタイムが設定されていない場合は、-1 が返されます。それ以外の場合は、キーの残りの有効期間を秒単位で返します。 </span><span> 113</span> <span> *</span><span>*/</span> <span> 114</span> <span>パブリック</span> <span>関数</span> ttl(<span>$sKey</span><span>) </span><span> 115</span> <span> { </span><span> 116</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> -2<span>; </span><span> 117</span> <span>return</span> self::<span>$redis</span>->ttl(<span>$sKey</span><span>); </span><span> 118</span> <span> } </span><span>119</span> <span>120</span><span>/*</span><span>* </span><span> 121</span> <span> * このコマンドは TTL コマンドに似ていますが、キーの残りの有効期間を TTL コマンドのような秒単位ではなくミリ秒単位で返します。 </span><span> 122</span> <span> * @著者 zhaoyingnan 2015-10-19 16:06 </span><span> 123</span> <span> * @param string $sKey キー </span><span> 124</span> <span> * @return int キーが存在しない場合は、-2 を返します。キーは存在するが、残りのライフタイムが設定されていない場合は、-1 が返されます。それ以外の場合は、キーの残りの有効期間を秒単位で返します。 </span><span> 125</span> <span> *</span><span>*/</span> <span> 126</span> <span>パブリック</span> <span>関数</span> pttl(<span>$sKey</span><span>) </span><span> 127</span> <span> { </span><span> 128</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> -2<span>; </span><span> 129</span> <span>return</span> self::<span>$redis</span>->pttl(<span>$sKey</span><span>); </span><span> 130</span> <span> } </span><span> 131</span> <span>132</span><span>/*</span><span>* </span><span> 133</span> <span> * 現在のインスタンスからターゲット インスタンスの指定されたデータベースにキーをアトミックに転送します。転送が成功すると、キーはターゲット インスタンスに表示されることが保証され、現在のインスタンスのキーは削除されます。 。 </span><span> 134</span> <span> * このコマンドはアトミック操作であり、実行すると、移行の成功、移行の失敗、またはタイムアウトのいずれかの結果が発生するまで、移行の 2 つのインスタンスがブロックされます。 </span><span> 135</span> <span> * @著者 zhaoyingnan 2015-10-16 18:24 </span><span> 136</span> <span> * @param string $sHost ターゲット IP </span><span> 137</span> <span> * @param int $iPort ポート </span><span> 138</span> <span> * @param string $sKey 操作対象のキー </span><span> 139</span> <span> * @param int $iDb 対象インスタンスのデータベース番号 </span><span> 140</span> <span> * @param int $iTimeout タイムアウト パラメーターはミリ秒形式で、現在のインスタンスとターゲット インスタンス間の通信間の最大間隔を指定します。これは、タイムアウト ミリ秒以内に操作を完了する必要はなく、データ送信時間がこのタイムアウト値を超えてはいけないことを意味します。</span><span> 141</span> <span> * @return bool 注: 指定されたキーがターゲット インスタンスの指定されたデータベースに存在する場合、現在のインスタンスのキーは削除されておらず、ターゲット インスタンスにも移動されていません。ターゲット インスタンスのキーはオリジナルのままです </span><span> 142</span> <span> *</span><span>*/</span> <span> 143</span> <span>public</span> <span>function</span> 移行(<span>$sHost</span>, <span>$iPort</span>, <span>$sKey</span>, <span>$iDb</span>, <span>$iTimeout</span><span>) </span><span> 144</span> <span> { </span><span> 145</span> <span>if</span>(!<span>$sHost</span> || !<span>$iPort</span> || !<span>$sKey</span> || !<span>$iDb</span> || !<span>$iTimeout</span>)<span>return</span> <span>FALSE </span><span>; </span> 146<span> uReturn</span> Self :: <span> $ redis</span>- & gt; 移行 (<span> $ Shost</span>, <span> $ iPort</span>, <span> $ SKEY</span>, <span> $ IDB</span>, <span> $ itimeout</span><span>); </span><span> 147</span> <span> } </span><span> 148</span> <span>149</span><span>/*</span><span>* </span><span> 150</span> <span> * 現在のデータベースのキーを指定されたデータベース db に移動します。 </span><span> 151</span> <span> * 現在のデータベース (ソース データベース) と指定されたデータベース (ターゲット データベース) に同じ名前の指定されたキーがある場合、またはキーが現在のデータベースに存在しない場合、MOVE は効果がありません。 </span><span> 152</span> <span> * @著者 zhaoyingnan 2015-10-19 15:42 </span><span> 153</span> <span> * @param string $sKey キー </span><span> 154</span> <span> * @param int $iDb 指定されたデータベース ID に移動します </span><span> 155</span> <span> * @return bool </span><span> 156</span> <span> *</span><span>*/</span> <span> 157</span> <span>パブリック</span> <span>関数</span> move(<span>$sKey</span>, <span>$iDb</span><span>) </span><span> 158</span> <span> { </span><span> 159</span> <span>if</span>(!<span>$sKey</span> || !<span>$iDb</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 160</span> <span>return</span> self::<span>$redis</span>->move(<span>$sKey</span>, <span>$iDb</span><span>); </span><span> 161</span> <span> } </span><span> 162</span> <span>163</span><span>/*</span><span>* </span><span> 164</span> <span> * 指定されたキーの有効期間を削除し、このキーを「揮発性」(有効期間のあるキー) から「永続的」(有効期間がなく有効期限が切れないキー) に変換します。 </span><span> 165</span> <span> * @著者 zhaoyingnan 2015-10-19 15:55 </span><span> 166</span> <span> * @param string $sKey キー </span><span> 167</span> <span> * @return bool 生存時間が正常に削除された場合は 1 を返します。キーが存在しない場合、またはキーに生存時間が設定されていない場合は 0 を返します </span><span> 168</span> <span> *</span><span>*/</span> <span> 169</span> <span>public</span> <span>function</span>persist(<span>$sKey</span><span>) </span><span> 170</span> <span> { </span><span> 171</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 172</span> <span>return</span> self::<span>$redis</span>->persist(<span>$sKey</span><span>); </span><span> 173</span> <span> } </span><span> 174</span> <span>175</span><span>/*</span><span>* </span><span> 176</span> <span> * 現在のデータベースからランダムなキーを返します。 </span><span> 177</span> <span> * @著者zhaoyingnan 2015-10-19 16:08 </span><span> 178</span> <span> * @return string データベースにキーがない場合は nil を返し、それ以外の場合はランダムなキーを返します。 </span><span> 179</span> <span> *</span><span>*/</span> <span> 180</span> <span>パブリック</span> <span>関数</span><span> ランダムキー() </span><span> 181</span> <span> { </span><span> 182</span> <span>return</span> self::<span>$redis</span>-><span>randomkey(); </span><span>183</span><span> } </span><span> 184</span> <span>185</span><span>/*</span><span>* </span><span> 186</span> <span> * key を newkey に変更します。key が newkey と同じ場合、エラーが返されます。 newkey がすでに存在する場合、値は上書きされます。</span><span> 187</span> <span> * @著者 zhaoyingnan 2015-10-19 16:12 </span><span> 188</span> <span> * @param string $sKey キー </span><span> 189</span> <span> * @param string $sNewKey 名前変更後のキーの値 </span><span> 190</span> <span> * @return bool </span><span> 191</span> <span> *</span><span>*/</span> <span> 192</span> <span>パブリック</span> <span>関数</span> <span>名前変更</span>(<span>$sKey</span>, <span>$sNewKey</span><span>) </span><span> 193</span> <span> { </span><span> 194</span> <span>if</span>(!<span>$sKey</span> || !<span>$sNewKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 195</span> <span>return</span> self::<span>$redis</span>-><span>rename</span>(<span>$sKey</span>, <span>$sNewKey</span><span>); </span><span>196</span><span> } </span><span>197</span> <span>198</span><span>/*</span><span>* </span><span> 199</span> <span> * newkey が存在しない場合に限り、key の名前を newkey に変更します。キーが存在しない場合はエラーを返します。 </span><span> 200</span> <span> * @author zhaoyingnan 2015-10-19 16:16 </span><span> 201</span> <span> * @param string $sKey キー </span><span> 202</span> <span> * @param string $sNewKey 名前変更後のキーの値 </span><span> 203</span> <span> * @return bool </span><span> 204</span> <span> *</span><span>*/</span> <span> 205</span> <span>public</span> <span>function</span> renamenx(<span>$sKey</span>, <span>$sNewKey</span><span>) </span><span> 206</span> <span> { </span><span> 207</span> <span>if</span>(!<span>$sKey</span> || !<span>$sNewKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 208</span> <span>return</span> self::<span>$redis</span>->renamenx(<span>$sKey</span>, <span>$sNewKey</span><span>); </span><span> 209</span> <span> } </span><span>210</span> <span>211</span><span>/*</span><span>* </span><span> 212</span> <span> * キーに格納されている値の型を返します。 </span><span> 213</span> <span> * @著者 zhaoyingnan 2015-10-19 16:25 </span><span> 214</span> <span> * @param string $sKey キー </span><span> 215</span> <span> * @return string none (キーが存在しない) string (文字列) list (リスト) set (set) zset (順序セット) hash (ハッシュ テーブル) </span><span> 216</span> <span> *</span><span>*/</span> <span> 217</span> <span>パブリック</span> <span>関数</span>型(<span>$sKey</span><span>) </span><span> 218</span> <span> { </span><span> 219</span> <span>return</span> self::<span>$redis</span>->type(<span>$sKey</span><span>); </span><span> 220</span> <span> } </span><span>221</span> <span> 222</span> <span>/*</span><span>****************** 文字列 **********************</span> <span>* /</span> <span>223</span> <span>224</span><span>/*</span><span>* </span><span> 225</span> <span> * キーと値を一致させます。キーがすでに存在する場合は、そのタイプに関係なく上書きされます。 </span><span> 226</span> <span> * @author zhaoyingnan 2015-10-19 16:35 </span><span> 227</span> <span> * @param string $sKey キー </span><span> 228</span> <span> * @param string $sValue キーの対応する値 </span><span> 229</span> <span> * @return bool </span><span> 230</span> <span> *</span><span>*/</span> <span> 231</span> <span>パブリック</span> <span>関数</span> set(<span>$sKey</span>, <span>$sValue</span><span>) </span><span> 232</span> <span> { </span><span> 233</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 234</span> <span>return</span> self::<span>$redis</span>->set(<span>$sKey</span>, <span>$sValue</span><span>); </span><span> 235</span> <span> } </span><span>236</span> <span>237</span><span>/*</span><span>* </span><span> 238</span> <span> * 文字列値に対応するキーを設定し、指定された秒数後にタイムアウトするようにキーを設定します。</span><span> 239</span> <span> * @著者 zhaoyingnan 2015-11-03 11:25 </span><span> 240</span> <span> * @param string $sKey 操作対象のキー </span><span> 241</span> <span> * @param int $iSecond ライフ サイクル (秒) </span><span> 242</span> <span> * @param string $sValue キーの対応する値 </span><span> 243</span> <span> * @return bool </span><span> 244</span> <span> *</span><span>*/</span> <span> 245</span> <span>public</span> <span>function</span> setex(<span>$sKey</span>, <span>$iSecond</span>, <span>$sValue</span><span>) </span><span> 246</span> <span> { </span><span> 247</span> <span>if</span>(!<span>$sKey</span> || !<span>$sValue</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 248</span> <span>$iSecond</span> = <span>$iSecond</span> ? <span>abs</span>((<span>intval</span>(<span>$iSecond</span>)))) : 30<span>; </span><span> 249</span> <span>return</span> self::<span>$redis</span>->setex(<span>$sKey</span>, <span>$iSecond</span>, <span>$sValue</span><span>); </span><span> 250</span> <span> } </span><span>251</span> <span>252</span><span>/*</span><span>* </span><span> 253</span> <span> * 文字列値に対応するキーを設定し、指定されたミリ秒後にタイムアウトするようにキーを設定します。 </span><span> 254</span> <span> * @著者 zhaoyingnan 2015-11-03 11:25 </span><span> 255</span> <span> * @param string $sKey 操作対象のキー </span><span> 256</span> <span> * @param int $iMillSecond ライフ サイクル (ミリ秒) </span><span> 257</span> <span> * @param string $sValue キーの対応する値 </span><span> 258</span> <span> * @return bool </span><span> 259</span> <span> *</span><span>*/</span> <span> 260</span> <span>public</span> <span>function</span> pstex(<span>$sKey</span>, <span>$iミリ秒</span> , <span>$sValue</span><span>) </span><span> 261</span> <span> { </span><span> 262</span> <span>if</span>(!<span>$sKey</span> || !<span>$sValue</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 263</span> <span>$iミリ秒</span> = <span>$iミリ秒</span> ? <span>abs</span>((<span>intval</span>(<span>$iミリ秒</span>)))) : 30<span>; </span><span> 264</span> <span>return</span> self::<span>$redis</span>->psetex(<span>$sKey</span>, <span>$iミリ秒</span>, <span>$sValue</span><span>); </span><span> 265</span> <span> } </span><span>266</span> <span>267</span><span>/*</span><span>* </span><span> 268</span> <span> * キーを値に自動的にマップし、元のキーに対応する値を返します。キーは存在するが、対応する値が文字列ではない場合、エラーが返されます。 </span><span> 269</span> <span> * @著者zhaoyingnan 2015-10-19 18:10 </span><span> 270</span> <span> * @param string $sKey キー </span><span> 271</span> <span> * @param string $sValue 新しい値セット </span><span> 272</span> <span> * @return string </span><span> 273</span> <span> *</span><span>*/</span> <span> 274</span> <span>public</span> <span>function</span> getset(<span>$sKey</span>, <span>$sValue</span><span>) </span><span> 275</span> <span> { </span><span> 276</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> ''<span>; </span><span> 277</span> <span>return</span> self::<span>$redis</span>->getset(<span>$sKey</span>, <span>$sValue</span><span>); </span><span> 278</span> <span> } </span><span> 279</span> <span> 280</span> <span>/*</span><span>* </span><span> 281</span> <span> * 指定されたキーと対応する値に対応します。 MSET は、通常の SET コマンドと同様に、既存の値を新しい値に置き換えます。 </span><span> 282</span> <span> * 既存の値を上書きしたくない場合は、コマンド MSETNX を参照してください。 </span><span> 283</span> <span> * MSET はアトミックであるため、指定されたすべてのキーが一度に設定されます。一部のキーが更新され、他のキーが変更されていないことをクライアントが認識することは不可能です。</span><span> 284</span> <span> * @著者zhaoyingnan 2015-11-03 11:04 </span><span> 285</span> <span> * @param array $arArray 設定する連想配列 </span><span> 286</span> <span> * @return bool </span><span> 287</span> <span> *</span><span>*/</span> <span> 288</span> <span>public</span> <span>function</span> mset(<span>$arArray</span> = <span>array</span><span>()) </span><span> 289</span> <span> { </span><span> 290</span> <span>if</span>(!<span>$arArray</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 291</span> <span>return</span> self::<span>$redis</span>->mset(<span>$arArray</span><span>); </span><span> 292</span> <span> } </span><span> 293</span> <span>294</span><span>/*</span><span>* </span><span> 295</span> <span> * 指定されたキーと対応する値に対応します。 </span><span> 296</span> <span> * キーがすでに存在する限り、MSETNX は単一の操作を実行しません。 </span><span> 297</span> <span> * この機能により、MSETNX はすべての操作が成功するか、何も実行されないかのどちらかを実現できます。これを使用して、一意のオブジェクトのさまざまなフィールドを表すさまざまなキーを設定できます。 </span><span> 298</span> <span> * MSETNX はアトミックであるため、指定されたすべてのキーが一度に設定されます。一部のキーが更新され、他のキーが変更されていないことをクライアントが認識することは不可能です。 </span><span> 299</span> <span> * @著者 zhaoyingnan 2015-11-03 11:11 </span><span> 300</span> <span> * @param array $arArray 設定する連想配列 </span><span> 301</span> <span> * @return bool TRUE すべてのキーが設定されている、FALSE キーが設定されていない (少なくとも 1 つのキーが存在する) </span><span> 302</span> <span> *</span><span>*/</span> <span> 303</span> <span>public</span> <span>function</span> msetnx(<span>$arArray</span> = <span>array</span><span>()) </span><span> 304</span> <span> { </span><span> 305</span> <span>if</span>(!<span>$arArray</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 306</span> <span>return</span> self::<span>$redis</span>->msetnx(<span>$arArray</span><span>); </span><span> 307</span> <span> } </span><span> 308</span> <span>309</span><span>/*</span><span>* </span><span> 310</span> <span> ※キーが存在しない場合は、キーに対応する文字列値を設定します。 </span><span> 311</span> <span> ※この場合のコマンドはSETと同じです。キーがすでに存在する場合、何も実行されません。 </span><span> 312</span> <span> * SETNX は「存在しない場合は SET」です。 </span><span> 313</span> <span> * @著者 zhaoyingnan 2015-11-03 11:49 </span><span> 314</span> <span> * @param string $sKey キー </span><span> 315</span> <span> * @param string $sValue 値 </span><span> 316</span> <span> * @return bool TRUEキーが設定され、FALSEキーが設定されていません </span><span> 317</span> <span> *</span><span>*/</span> <span> 318</span> <span>public</span> <span>function</span> setnx(<span>$sKey</span>, <span>$sValue</span><span>) </span><span> 319</span> <span> { </span><span> 320</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 321</span> <span>return</span> self::<span>$redis</span>->setnx(<span>$sKey</span>, <span>$sValue</span><span>); </span><span> 322</span> <span> } </span><span>323</span> <span>324</span><span>/*</span><span>* </span><span> 325</span> <span> * キーの値を返します。キーが存在しない場合は、特別な値 nil が返されます。キーの値が文字列でない場合、GET は文字列型の値のみを処理するため、エラーが返されます。 </span><span> 326</span> <span> * @author zhaoyingnan 2015-10-19 17:57 </span><span> 327</span> <span> * @param string $sKey キー </span><span> 328</span> <span> * @return string </span><span> 329</span> <span> *</span><span>*/</span> <span> 330</span> <span>パブリック</span> <span>関数</span> get(<span>$sKey</span><span>) </span><span> 331</span> <span> { </span><span> 332</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> ''<span>; </span><span> 333</span> <span>return</span> self::<span>$redis</span>->get(<span>$sKey</span><span>); </span><span> 334</span> <span> } </span><span> 335</span> <span>336</span><span>/*</span><span>* </span><span> 337</span> <span> * 指定されたすべてのキーの値を返します。文字列に対応しないキー、または存在しないキーごとに、特別な値 nil が返されます。このため、操作が失敗することはありません。</span><span> 338</span> <span> * @著者 zhaoyingnan 2015-11-03 10:55 </span><span> 339</span> <span> * @param array $arKey 取得するキーの配列 </span><span> 340</span> <span> * @return array redis は、数値でインデックス付けされた配列を返します。ここで返されるのは連想配列です。 </span><span> 341</span> <span> *</span><span>*/</span> <span> 342</span> <span>public</span> <span>function</span> mget(<span>$arKey</span> = <span>array</span><span>()) </span><span> 343</span> <span> { </span><span> 344</span> <span>if</span>(!<span>$arKey</span>)<span>return</span> <span>array</span><span>(); </span><span> 345</span> <span>$arResult</span> = self::<span>$redis</span>->mget(<span>$arKey</span><span>); </span><span> 346</span> <span>return</span> <span>array_combine</span>(<span>$arKey</span>, <span>$arResult</span><span>); </span><span> 347</span> <span> } </span><span> 348</span> <span> 349</span> <span>/*</span><span>* </span><span> 350</span> <span> * キーがすでに存在し、値が文字列の場合、このコマンドは元の値 (値) の末尾に値を追加します。 </span><span> 351</span> <span> * キーが存在しない場合は、まず空の文字列でキーを作成し、次に追加操作を実行します。この場合、APPEND は SET 操作と同様になります。 </span><span> 352</span> <span> * @著者zhaoyingnan 2015-10-19 16:34 </span><span> 353</span> <span> * @param string $sKey キー </span><span> 354</span> <span> * @param string $sValue の追加値 </span><span> 355</span> <span> * @return int </span><span> 356</span> <span> *</span><span>*/</span> <span> 357</span> <span>public</span> <span>function</span> append(<span>$sKey</span>, <span>$sValue</span><span>) </span><span> 358</span> <span> { </span><span> 359</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 360</span> <span>return</span> self::<span>$redis</span>->append(<span>$sKey</span>, <span>$sValue</span><span>); </span><span> 361</span> <span> } </span><span> 362</span> <span>363</span><span>/*</span><span>* </span><span> 364</span> <span> * キーに対応する番号に 1 を加えます。キーが存在しない場合、キーに対応する値は操作前に 0 に設定されます。 </span><span> 365</span> <span> * key の値が間違った型である場合、または数値として表現できない文字列である場合は、エラーが返されます。 </span><span> 366</span> <span> * この演算は、最大 64 ビットの符号付き整数をサポートします。 </span><span> 367</span> <span> * @著者 zhaoyingnan 2015-10-19 17:44 </span><span> 368</span> <span> * @param string $sKey キー </span><span> 369</span> <span> * @return string </span><span> 370</span> <span> *</span><span>*/</span> <span> 371</span> <span>パブリック</span> <span>関数</span> incr(<span>$sKey</span><span>) </span><span> 372</span> <span> { </span><span> 373</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> ''<span>; </span><span> 374</span> <span>return</span> self::<span>$redis</span>->incr(<span>$sKey</span><span>); </span><span> 375</span> <span> } </span><span> 376</span> <span>377</span><span>/*</span><span>* </span><span> 378</span> <span> * キーに対応する数値にデクリメントを加算します。キーが存在しない場合、操作前にキーは 0 に設定されます。 </span><span> 379</span> <span> ※キーの値の型が間違っていたり、数値として表現できない文字列の場合はエラーとなります。この演算では、最大 64 ビットの符号付き正数がサポートされます。 </span><span> 380</span> <span> * @author zhaoyingnan 2015-10-19 17:44 </span><span> 381</span> <span> * @param string $sKey キー </span><span> 382</span> <span> * @param int $iIncrement ステップ値 </span><span> 383</span> <span> * @return string </span><span> 384</span> <span> *</span><span>*/</span> <span> 385</span> <span>public</span> <span>function</span> incrby(<span>$sKey</span>, <span>$iIncrement</span><span>) </span><span> 386</span> <span> { </span><span> 387</span> <span>if</span>(!<span>$sKey</span> || !<span>$iIncrement</span>)<span>return</span> ''<span>; </span><span> 388</span> <span>return</span> self::<span>$redis</span>->incrby(<span>$sKey</span>, <span>$iIncrement</span><span>); </span><span> 389</span> <span> } </span><span> 390</span> <span>391</span><span>/*</span><span>* </span><span> 392</span> <span> * キーに対応する数値にデクリメントを加算します。キーが存在しない場合、操作前にキーは 0 に設定されます。 </span><span> 393</span> <span> ※キーの値の型が間違っていたり、数値として表現できない文字列の場合はエラーが返ります。この演算では、最大 64 ビットの符号付き正数がサポートされます。</span><span> 394</span> <span> * @著者zhaoyingnan 2015-10-19 17:44 </span><span> 395</span> <span> * @param string $sKey キー </span><span> 396</span> <span> * @param fload $floatIncrement ステップ値 </span><span> 397</span> <span> * @return string </span><span> 398</span> <span> *</span><span>*/</span> <span> 399</span> <span>public</span> <span>function</span> incrbyfloat(<span>$sKey</span>, <span>$floatIncrement</span><span>) </span><span> 400</span> <span> { </span><span> 401</span> <span>if</span>(!<span>$sKey</span> || !<span>$floatIncrement</span>)<span>return</span> ''<span>; </span><span> 402</span> <span>return</span> self::<span>$redis</span>->incrbyfloat(<span>$sKey</span>, <span>$floatIncrement</span><span>); </span><span> 403</span> <span> } </span><span> 404</span> <span> 405</span> <span>/*</span><span>* </span><span> 406</span> <span> * キーに対応する数字から 1 を引きます。キーが存在しない場合、キーに対応する値は操作前に 0 に設定されます。 </span><span> 407</span> <span> * key の値が間違った型である場合、または数値として表現できない文字列である場合は、エラーが返されます。この演算では、最大 64 ビットの符号付き整数がサポートされます。 </span><span> 408</span> <span> * @著者 zhaoyingnan 2015-10-19 17:44 </span><span> 409</span> <span> * @param string $sKey キー </span><span> 410</span> <span> * @return string </span><span> 411</span> <span> *</span><span>*/</span> <span> 412</span> <span>public</span> <span>function</span> decr(<span>$sKey</span><span>) </span><span> 413</span> <span> { </span><span> 414</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> ''<span>; </span><span> 415</span> <span>return</span> self::<span>$redis</span>->decr(<span>$sKey</span><span>); </span><span> 416</span> <span> } </span><span> 417</span> <span> 418</span> <span>/*</span><span>* </span><span> 419</span> <span> * キーに対応する番号をデクリメントします。キーが存在しない場合、操作前にキーは 0 に設定されます。 </span><span> 420</span> <span> ※キーの値の型が間違っていたり、数値として表現できない文字列の場合はエラーとなります。この演算では、最大 64 ビットの符号付き正数がサポートされます。 </span><span> 421</span> <span> * @author zhaoyingnan 2015-10-19 17:44 </span><span> 422</span> <span> * @param string $sKey キー </span><span> 423</span> <span> * @param int $iIncrement ステップ値 </span><span> 424</span> <span> * @return string </span><span> 425</span> <span> *</span><span>*/</span> <span> 426</span> <span>public</span> <span>function</span> decrby(<span>$sKey</span>, <span>$iIncrement</span><span>) </span><span> 427</span> <span> { </span><span> 428</span> <span>if</span>(!<span>$sKey</span> || !<span>$iIncrement</span>)<span>return</span> ''<span>; </span><span> 429</span> <span>return</span> self::<span>$redis</span>->decrby(<span>$sKey</span>, <span>$iIncrement</span><span>); </span><span> 430</span> <span> } </span><span> 431</span> <span> 432</span> <span>/*</span><span>* </span><span> 433</span> <span> * このコマンドは GETRANGE に変更され、2.0 より前の Redis バージョンでは SUBSTR と呼ばれます。 </span><span> 434</span> <span> * キーに対応する文字列値の部分文字列を返します。この部分文字列は、開始位置と終了位置の変位によって決まります (両方とも文字列内にあります)。 </span><span> 435</span> <span> * 負のディスプレイスメントを使用して、文字列の末尾から始まる添字を表すことができます。したがって、-1 は最後の文字、-2 は最後から 2 番目の文字、というようになります。 </span><span> 436</span> <span> * この関数が範囲外のリクエストを処理する場合、結果は文字列に制限されます。 </span><span> 437</span> <span> * @著者 zhaoyingnan 2015-10-19 18:04 </span><span> 438</span> <span> * @param string $sKey キー </span><span> 439</span> <span> * @pause int $iStart 開始位置 </span><span> 440</span> <span> * @pause int $iEnd 終了位置 </span><span> 441</span> <span> * @return string </span><span> 442</span> <span> *</span><span>*/</span> <span> 443</span> <span>public</span> <span>function</span> getrange(<span>$sKey</span>, <span>$iStart</span> = 0, <span>$iEnd</span> = -1<span>) </span><span> 444</span> <span> { </span><span> 445</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> ''<span>; </span><span> 446</span> <span>return</span> self::<span>$redis</span>->getrange(<span>$sKey</span>, <span>$iStart</span>, <span>$iEnd</span><span>); </span><span> 447</span> <span> } </span><span> 448</span> <span> 449</span> <span>/*</span><span>* </span><span> 450</span> <span> * キーの文字列型の値の長さを返します。キーが文字列以外の型に対応する場合は、エラーが返されます。</span><span> 451</span> <span> * @author zhaoyingnan 2015-11-03 11:40 </span><span> 452</span> <span> * @param string $sKey </span><span> 453</span> <span> * @return </span><span> 454</span> <span> *</span><span>*/</span> <span> 455</span> <span>パブリック</span> <span>関数</span> <span>strlen</span>(<span>$sKey</span><span>) </span><span> 456</span> <span> { </span><span> 457</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 458</span> <span>return</span> self::<span>$redis</span>-><span>strlen</span>(<span>$sKey</span><span>); </span><span> 459</span> <span> } </span><span> 460</span> <span> 461</span> <span>/*</span><span>****************** リスト **********************</span> <span>* /</span> <span>462</span> <span> 463</span> <span>/*</span><span>* </span><span> 464</span> <span> * 指定されたすべての値を key に格納されているリストの先頭に挿入します。キーが存在しない場合は、プッシュ操作の前に空のリストが作成されます。 </span><span> 465</span> <span> * keyに対応する値がリストでない場合はエラーが返されます。 </span><span> 466</span> <span> * 1 つのコマンドを使用して複数の要素をリストにプッシュできます。コマンドの最後に指定された複数のパラメーターを追加するだけです。 </span><span> 467</span> <span> * 要素はリストの左端から右端まで 1 つずつ先頭に挿入されます。 したがって、このコマンド例 LPUSH mylist a b c では、返されるリストは最初の要素として c、2 番目の要素として b、3 番目の要素として a になります。 </span><span> 468</span> <span> * @著者 zhaoyingnan 2015-11-03 11:59 </span><span> 469</span> <span> * @param string $sKey </span><span> 470</span> <span> * @param array $arValue キーにプッシュする必要がある値の配列 </span><span> 471</span> <span> * @return int プッシュ操作後のリストの長さ。 </span><span> 472</span> <span> *</span><span>*/</span> <span> 473</span> <span>public</span> <span>function</span> lpush(<span>$sKey</span>, <span>$arValue</span> = <span>array</span><span>()) </span><span> 474</span> <span> { </span><span> 475</span> <span>if</span>(!<span>$sKey</span> || !<span>$arValue</span>)<span>return</span> 0<span>; </span><span> 476</span> <span>foreach</span>(<span>$arValue</span> <span>as</span> <span>$val</span><span>) </span><span> 477</span> self::<span>$redis</span>->lpush(<span>$sKey</span>, <span>$val</span><span>); </span><span> 478</span> <span>return</span> self::llen(<span>$sKey</span><span>); </span><span> 479</span> <span> } </span><span> 480</span> <span> 481</span> <span>/*</span><span>* </span><span> 482</span> <span> ※キーが既に存在し、リストが格納されている場合のみ、キー配下のリストの先頭に値を挿入します。 </span><span> 483</span> <span> ※LPUSHとは逆に、キーが存在しない場合は何も動作しません。 </span><span> 484</span> <span> * @著者zhaoyingnan 2015-11-03 13:21 </span><span> 485</span> <span> * @param string $sKey </span><span> 486</span> <span> * @param array $arValue キーにプッシュする必要がある値の配列 </span><span> 487</span> <span> * @return int </span><span> 488</span> <span> *</span><span>*/</span> <span> 489</span> <span>public</span> <span>function</span> lpushx(<span>$sKey</span>, <span>$arValue</span> = <span>array</span><span>()) </span><span> 490</span> <span> { </span><span> 491</span> <span>if</span>(!<span>$sKey</span> || !<span>$arValue</span>)<span>return</span> 0<span>; </span><span> 492</span> <span>foreach</span>(<span>$arValue</span> <span>as</span> <span>$val</span><span>) </span><span> 493</span> self::<span>$redis</span>->lpushx(<span>$sKey</span>, <span>$val</span><span>); </span><span> 494</span> <span>return</span> self::llen(<span>$sKey</span><span>); </span><span> 495</span> <span> } </span><span> 496</span> <span> 497</span> <span>/*</span><span>* </span><span> 498</span> <span> * 指定されたすべての値を key に格納されているリストの末尾に挿入します。キーが存在しない場合は、空のリストが作成され、プッシュ操作が実行されます。 </span><span> 499</span> <span> ※キーがリストとして保存されていない場合はエラーが返されます。 </span><span> 500</span> <span> * 1 つのコマンドを使用して複数の要素をキューに入れることができます。コマンドの後に複数のパラメーターを指定するだけです。 </span><span> 501</span> <span> * 要素はリストの最後から左から右に順番に挿入されます。 たとえば、コマンド RPUSH mylist a b c は、最初の要素が a 、2 番目の要素が b 、3 番目の要素が c であるリストを返します。</span><span> 502</span> <span> * @著者zhaoyingnan 2015-11-03 12:15 </span><span> 503</span> <span> * @param string $sKey </span><span> 504</span> <span> * @param array $arValue キーにプッシュする必要がある値の配列 </span><span> 505</span> <span> * @return int プッシュ操作後のリストの長さ。 </span><span> 506</span> <span> *</span><span>*/</span> <span> 507</span> <span>public</span> <span>function</span> rpush(<span>$sKey</span>, <span>$arValue</span> = <span>array</span><span>()) </span><span> 508</span> <span> { </span><span> 509</span> <span>if</span>(!<span>$sKey</span> || !<span>$arValue</span>)<span>return</span> 0<span>; </span><span> 510</span> <span>foreach</span>(<span>$arValue</span> <span>as</span> <span>$val</span><span>) </span><span> 511</span> self::<span>$redis</span>->lpush(<span>$sKey</span>, <span>$val</span><span>); </span><span> 512</span> <span>return</span> self::llen(<span>$sKey</span><span>); </span><span> 513</span> <span> } </span><span>514</span> <span>515</span><span>/*</span><span>* </span><span> 516</span> <span> * キーが存在し、リストである場合に限り、リストのキーの末尾に値 value を挿入します。 </span><span> 517</span> <span> * RPUSH コマンドとは異なり、RPUSHX コマンドはキーが存在しない場合には何も行いません。 </span><span> 518</span> <span> * @著者 zhaoyingnan 2015-11-03 13:23 </span><span> 519</span> <span> * @param string $sKey </span><span> 520</span> <span> * @param array $arValue キーにプッシュする必要がある値の配列 </span><span> 521</span> <span> * @return int プッシュ操作後のリストの長さ。 </span><span> 522</span> <span> *</span><span>*/</span> <span> 523</span> <span>public</span> <span>function</span> rpushx(<span>$sKey</span>, <span>$arValue</span> = <span>array</span><span>()) </span><span> 524</span> <span> { </span><span> 525</span> <span>if</span>(!<span>$sKey</span> || !<span>$arValue</span>)<span>return</span> 0<span>; </span><span> 526</span> <span>foreach</span>(<span>$arValue</span> <span>as</span> <span>$val</span><span>) </span><span> 527</span> self::<span>$redis</span>->rpushx(<span>$sKey</span>, <span>$val</span><span>); </span><span> 528</span> <span>return</span> self::llen(<span>$sKey</span><span>); </span><span> 529</span> <span> } </span><span> 530</span> <span>531</span><span>/*</span><span>* </span><span> 532</span> <span> * key に格納されているリストの長さを返します。 </span><span> 533</span> <span> * @著者zhaoyingnan 2015-11-03 12:12 </span><span> 534</span> <span> * @param string $sKey </span><span> 535</span> <span> * @return bool キーが存在しない場合、空のリストとみなされ、返される長さは 0 になります。 keyに格納された値がリストでない場合はエラーが返されます。 </span><span> 536</span> <span> *</span><span>*/</span> <span> 537</span> <span>パブリック</span> <span>関数</span> llen(<span>$sKey</span><span>) </span><span> 538</span> <span> { </span><span> 539</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> 0<span>; </span><span> 540</span> <span>return</span> self::<span>$redis</span>->llen(<span>$sKey</span><span>); </span><span> 541</span> <span> } </span><span>542</span> <span>543</span><span>/*</span><span>* </span><span> 544</span> <span> * keyに対応するリスト内の要素のインデックスindexの値を返す </span><span> 545</span> <span> * 添え字は 0 からインデックスが付けられるため、0 は最初の要素を意味し、1 は 2 番目の要素を意味します。 </span><span> 546</span> <span> * 負のインデックスは、リストの末尾からインデックス付けされた要素を指定するために使用されます。このアプローチでは、-1 は最後の要素を表し、-2 は最後から 2 番目の要素を表し、以下同様になります。 </span><span> 547</span> <span> ※キー位置の値がリストでない場合はエラーを返します。</span><span> 548</span> <span> * @著者 zhaoyingnan 2015-11-03 13:30 </span><span> 549</span> <span> * @param string $sKey </span><span> 550</span> <span> * @param array $index key 対応するリストのインデックスインデックス </span><span> 551</span> <span> * @return mix </span><span> 552</span> <span> *</span><span>*/</span> <span> 553</span> <span>public</span> <span>function</span> lindex(<span>$sKey</span>, <span>$index</span> = 0<span>) </span><span> 554</span> <span> { </span><span> 555</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 556</span> <span>return</span> self::<span>$redis</span>->lindex(<span>$sKey</span>, <span>intval</span>(<span>$index</span><span>)); </span><span> 557</span> <span> } </span><span> 558</span> <span> 559</span> <span>/*</span><span>* </span><span> 560</span> <span> * インデックス位置のリスト要素の値を value に設定します。 </span><span> 561</span> <span> * 添え字は 0 からインデックスが付けられるため、0 は最初の要素を意味し、1 は 2 番目の要素を意味します。 </span><span> 562</span> <span> ※インデックスが範囲外の場合はエラーとなります。 </span><span> 563</span> <span> * @著者 zhaoyingnan 2015-11-03 14:27 </span><span> 564</span> <span> * @param string $sKey </span><span> 565</span> <span> * @param int $index key 対応するリストにインデックスが付けられます。 </span><span> 566</span> <span> * @param string $sValue 設定する値 </span><span> 567</span> <span> * @return </span><span> 568</span> <span> *</span><span>*/</span> <span> 569</span> <span>public</span> <span>function</span> lset(<span>$sKey</span>, <span>$index</span>, <span>$sValue</span><span>) </span><span> 570</span> <span> { </span><span> 571</span> <span>if</span>(!<span>$sKey</span> || !<span>$sValue</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 572</span> <span>return</span> self::<span>$redis</span>->lset(<span>$sKey</span>, <span>$index</span>, <span>$sValue</span><span>); </span><span> 573</span> <span> } </span><span>574</span> <span> 575</span> <span>/*</span><span>* </span><span> 576</span> <span> * キーに格納されているリストのピボット値の前または後に値を挿入します。 </span><span> 577</span> <span> * キーが存在しない場合、このリストは空のリストとみなされ、何も操作されません。 </span><span> 578</span> <span> * キーは存在するが、保存されたリストがリストではない場合、エラーが返されます。 </span><span> 579</span> <span> * @著者zhaoyingnan 2015-11-03 13:42 </span><span> 580</span> <span> * @param string $sKey </span><span> 581</span> <span> * @param string $sPosion ベース値の前または後 (BEFORE または AFTER) </span><span> 582</span> <span> * @param string $pivot リスト内のピボット値 </span><span> 583</span> <span> * @param string $sValue 挿入された値 </span><span> 584</span> <span> * @return mix 挿入操作後のリストの長さ、またはピボット値が見つからない場合は -1。 </span><span> 585</span> <span> *</span><span>*/</span> <span> 586</span> <span>public</span> <span>function</span> linsert(<span>$sKey</span>, <span>$sPosion</span>, <span>$pivot</span>, <span>$sValue</span><span>) </span><span> 587</span> <span> { </span><span> 588</span> <span>if</span>(!<span>$sKey</span> || !<span>$pivot</span> || !<span>$sValue</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 589</span> <span>$sPosion</span> = <span>in_array</span>(<span>$sPosion</span>, <span>array</span>('BEFORE', 'AFTER')) <span>strtoupper</span>(<span>$sPosion</span>) : 'BEFORE'<span> ; </span><span> 590</span> <span>return</span> self::<span>$redis</span>->linsert(<span>$sKey</span>, <span>$sPosion</span>, <span>$pivot</span>, <span>$sValue</span><span>); </span><span> 591</span> <span> } </span><span>592</span> <span> 593</span> <span>/*</span><span>* </span><span> 594</span> <span> * key に格納されているリストから、値が value である最初の count 要素を削除します。 count パラメータは、次のようにこの操作に影響を与えます。 </span><span> 595</span> <span> * count > 0: 先頭から末尾までの値を持つ要素を削除します。 </span><span> 596</span> <span> * count <span> 597</span> <span> * count = 0: value を持つすべての要素を削除します。 </span><span> 598</span> <span> * たとえば、LREM list -2 "hello" は、list に格納されているリストから "hello" の最後の 2 つの出現を削除します。 </span><span> 599</span> <span> ※なお、キーがリストに存在しない場合は空のリストとして扱われるため、キーが存在しない場合、このコマンドは0を返します。</span><span> 600</span> <span> * @著者 zhaoyingnan 2015-11-03 13:53 </span><span> 601</span> <span> * @param string $sKey </span><span> 602</span> <span> * @param int $iCount count > 0: 値を持つ要素を最初から最後まで削除します。 count <span> 603</span> <span> * @param string $sValue 削除する値 </span><span> 604</span> <span> * @return int </span><span> 605</span> <span> *</span><span>*/</span> <span> 606</span> <span>//</span><span>パブリック関数 lremu($sKey, $iCount, $sValue) </span><span> 607</span> <span> //{ </span><span> 608</span> <span> // var_dump($sValue); </span><span> 609</span> <span> // if(!$sKey || !$sValue)return FALSE; </span><span> 610</span> <span> // return self::$redis->lrem($sKey, intval($iCount), $sValue); </span><span> 611</span> <span> //}</span> <span>612</span> <span>613</span><span>/*</span><span>* </span><span> 614</span> <span> * 指定された範囲内の指定された要素のみがリストに含まれるように、既存のリストをトリミングします。 </span><span> 615</span> <span> * start と stop は両方とも 0 からカウントを開始します。0 はリスト (ヘッダー) の最初の要素、1 は 2 番目の要素などです。 </span><span> 616</span> <span> * @著者 zhaoyingnan 2015-11-03 14:45 </span><span> 617</span> <span> * @param string $sKey </span><span> 618</span> <span> * @param int $iStart 指定された範囲内の開始位置 </span><span> 619</span> <span> * @param int $iEnd は範囲内の終了位置を指定します </span><span> 620</span> <span> * @return bool </span><span> 621</span> <span> *</span><span>*/</span> <span> 622</span> <span>パブリック</span> <span>関数</span> <span>ltrim</span>(<span>$sKey</span>, <span>$iStart</span>, <span>$iEnd</span><span>) </span><span> 623</span> <span> { </span><span> 624</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 625</span> <span>return</span> self::<span>$redis</span>-><span>ltrim</span>(<span>$sKey</span>, <span>intval</span>(<span>$iStart</span>), )); <span></span> 626<span> </span> } <span></span> 627<span> </span> 628<span> </span>/*<span></span>* <span></span> 629<span> </span> * キーのリストに格納されている指定された範囲の要素を返します。 <span></span> 630<span> </span> * 開始オフセットと終了オフセットはどちらも 0 から始まる添字です。つまり、リストの最初の要素は 0 (リストの先頭)、2 番目の要素は 1 になります。 <span></span> 631<span> </span> * オフセットは負の数にすることもできます。これは、オフセットがリストの最後から数えられることを意味します。 たとえば、-1 はリストの最後の要素、-2 は最後から 2 番目の要素、などとなります。 <span></span> 632<span> </span> * @著者 zhaoyingnan 2015-11-03 14:54 <span></span> 633<span> </span> * @param string $sKey <span></span> 634<span> </span> * @param int $iStart 開始位置 <span></span> 635<span> </span> * @param int $iEnd 終了位置 <span></span> 636<span> </span> * @return 配列 <span></span> 637<span> </span> *<span></span>*/<span> </span> 638<span> </span>public<span> </span>function<span> lrange(</span>$sKey<span>, </span>$iStart<span>, </span>$iEnd<span></span>) <span></span> 639<span> </span> { <span></span> 640<span> </span>if<span>(!</span>$sKey<span>)</span>return<span> </span>FALSE<span></span>; <span></span> 641<span> </span>return<span> self::</span>$redis<span>->lrange(</span>$sKey<span>, </span>intval<span>(</span>$iStart<span>), </span>intval<span>(</span>$iEnd<span></span>)); <span></span> 642<span> </span> } <span></span> 643<span> </span> 644<span> </span>/*<span></span>* <span></span> 645<span> </span> * キーに対応するリストの最初の要素を削除して返します。 <span></span> 646<span> </span> * @著者 zhaoyingnan 2015-11-03 21:49 <span></span> 647<span> </span> * @param string $sKey <span></span> 648<span> </span> * @return bool <span></span> 649<span> </span> *<span></span>*/<span> </span> 650<span> </span>パブリック<span> </span>関数<span> lpop(</span>$sKey<span></span>) <span></span> 651<span> </span> { <span></span> 652<span> </span>if<span>(!</span>$sKey<span>)</span>return<span> </span>FALSE<span></span>; <span></span> 653<span> </span>return<span> self::</span>$redis<span>->lpop(</span>$sKey<span></span>); <span></span> 654<span> </span> } <span></span> 655<span> </span>656<span></span>/*<span></span>* <span></span> 657<span> </span> * key に格納されているリストの最後の要素を削除して返します。</span><span> 658</span> <span> * @著者 zhaoyingnan 2015-11-03 21:49 </span><span> 659</span> <span> * @param string $sKey </span><span> 660</span> <span> * @return bool </span><span> 661</span> <span> *</span><span>*/</span> <span> 662</span> <span>パブリック</span> <span>関数</span> rpop(<span>$sKey</span><span>) </span><span> 663</span> <span> { </span><span> 664</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 665</span> <span>return</span> self::<span>$redis</span>->rpop(<span>$sKey</span><span>); </span><span> 666</span> <span> } </span><span> 667</span> <span> 668</span> <span>/*</span><span>****************** セット ********************** *</span><span>* /</span> <span>669</span> <span> 670</span> <span>/*</span><span>* </span><span> 671</span> <span> * 1 つ以上の指定されたメンバー要素をコレクションのキーに追加します。 </span><span> 672</span> <span> * 1 つ以上の指定された要素メンバーがコレクション キーに既に存在する場合、それらは無視されます。 </span><span> 673</span> <span> * コレクションキーが存在しない場合は、新しいコレクションキーを作成し、コレクションキーに member 要素を追加します。 </span><span> 674</span> <span> * キーの種類がコレクションではない場合、エラーが返されます。 </span><span> 675</span> <span> * @著者zhaoyingnan 2015-11-03 21:55 </span><span> 676</span> <span> * @param string $sKey </span><span> 677</span> <span> * @param array $arMember 追加する要素の配列 </span><span> 678</span> <span> * @return int コレクションにすでに存在する要素を除いて、コレクションに新しく正常に追加された要素の数を返します。 </span><span> 679</span> <span> *</span><span>*/</span> <span> 680</span> <span>public</span> <span>function</span>sadd(<span>$sKey</span>, <span>$arMember</span> = <span>array</span><span>()) </span><span> 681</span> <span> { </span><span> 682</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> <span>FALSE</span><span>; </span><span> 683</span> <span>$iCount</span> = 0<span>; </span><span> 684</span> <span>foreach</span>(<span>$arメンバー</span> <span>as</span> <span>$val</span><span>) </span><span> 685</span> <span> { </span><span> 686</span> <span>if</span>(self::<span>$redis</span>->sadd(<span>$sKey</span>, <span>$val</span><span>)) </span><span> 687</span> <span>$iCount</span>++<span>; </span><span> 688</span> <span> } </span><span> 689</span> <span>戻る</span> <span>$iCount</span><span>; </span><span> 690</span> <span> } </span><span> 691</span> <span> 692</span> <span>/*</span><span>* </span><span> 693</span> <span> * コレクションに格納されているキーのカーディナリティ (コレクション要素の数) を返します。 </span><span> 694</span> <span> * @著者zhaoyingnan 2015-11-03 22:09 </span><span> 695</span> <span> * @param string $sKey </span><span> 696</span> <span> * @return int </span><span> 697</span> <span> *</span><span>*/</span> <span> 698</span> <span>パブリック</span> <span>関数</span> スカード(<span>$sKey</span><span>) </span><span> 699</span> <span> { </span><span> 700</span> <span>if</span>(!<span>$sKey</span>)<span>return</span> 0<span>; </span><span> 701</span> <span>return</span> self::<span>$redis</span>->scard(<span>$sKey</span><span>); </span><span> 702</span> <span> } </span><span> 703</span> <span> 704</span> <span>/*</span><span>* </span><span> 705</span> <span> * セットと指定されたセットの差の要素を返します。 </span><span> 706</span> <span> * @著者zhaoyingnan 2015-11-03 22:13 </span><span> 707</span> <span> * @param 配列 $arKey </span><span> 708</span> <span> * @return 配列 </span><span> 709</span> <span> *</span><span>*/</span> <span> 710</span> <span>パブリック</span> <span>関数</span> sdiff(<span>$arKey</span><span>) </span><span> 711</span> <span> { </span><span> 712</span> <span>if</span>(!<span>$arKey</span>)<span>return</span> <span>array</span><span>(); </span><span> 713</span> <span>return</span> self::<span>$redis</span>->sdiff(<span>$arKey</span><span>); </span><span> 714</span> <span> }</span><span> 715</span> <span> 716</span> <span>/*</span><span>* </span><span> 717</span> <span> * このコマンドは結果セットを返さず、結果を宛先コレクションに保存することを除いて、SDIFF に似ています。 </span><span> 718</span> <span> ※宛先が既に存在する場合は上書きしてください。 </span><span> 719</span> <span> * @著者zhaoyingnan 2015-11-04 10:16 </span><span> 720</span> <span> * @param string $sNewKey </span><span> 721</span> <span> * @param 配列 $arKey </span><span> 722</span> <span> * @return int 結果セット内の要素の数。 </span><span> 723</span> <span> *</span><span>*/</span> <span> 724</span> <span>public</span> <span>function</span> sdiffstore(<span>$sNewKey</span>, <span>$arKey</span><span>) </span><span> 725</span> <span> { </span><span> 726</span> <span>if</span>(!<span>$arKey</span> || !<span>$sNewKey</span>)<span>return</span> 0<span>; </span><span> 727</span> <span>if</span>(<span>$arResult</span> = self::<span>$redis</span>->sdiff(<span>$arKey</span><span>)) </span><span> 728</span> <span>return</span> <span>$this</span>->sadd(<span>$sNewKey</span>, <span>$arResult</span><span>); </span><span> 729</span> <span>戻る</span> 0<span>; </span><span> 730</span> <span> } </span><span> 731</span> <span> 732</span> <span>/*</span><span>* </span><span> 733</span> <span> * 指定されたセットのすべてのメンバーの共通部分を返します。 </span><span> 734</span> <span> * @著者zhaoyingnan 2015-11-04 10:18 </span><span> 735</span> <span> * @param 配列 $arKey </span><span> 736</span> <span> * @return 配列 </span><span> 737</span> <span> *</span><span>*/</span> <span> 738</span> <span>パブリック</span> <span>関数</span>シンター(<span>$arKey</span><span>) </span><span> 739</span> <span> { </span><span> 740</span> <span>if</span>(!<span>$arKey</span>)<span>return</span> <span>array</span><span>(); </span><span> 741</span> <span>return</span> self::<sp></sp></span>