您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13241|回复: 1
打印 上一主题 下一主题

[php学习资料] php操作redis大全

[复制链接]
跳转到指定楼层
楼主
发表于 2019-11-26 16:58:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. **php.ini文件添加:extension=php_redis.dll  重启php, phpinfo可以看到redis则证明安装成功**
复制代码
php连接redis测试
  1. <?php
    / \- T$ ]% q; `" I* [
  2. $redis = new Redis();  
    8 Q% Q9 z' c2 Z2 n% J) x
  3. $redis->connect('127.0.0.1', 6379);//serverip port
    2 A6 P/ a2 I! y% l
  4. $redis->auth('mypassword');//my redis password
    6 L+ m1 ]9 ?# j6 V# y  E: g
  5. $redis ->set( "test" , "Hello World");  % q9 w* }! n2 G" }
  6. echo $redis ->get( "test");: \+ u/ @" p# H/ m6 v4 h
复制代码
php操作redis函数封装
  1. /**' H9 \3 s& o* J% t- a) r" W
  2. * 如果不传入$host和$port默认读取Laravel环境变量的参数
    8 P7 U6 O( U% ?; p
  3. * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi
    ) }, I, w' r9 M- f- F9 |+ T
  4. */
    & N0 ?' U" Q6 F6 W" e& [9 z% ^
  5. function RedisSet($key,$value,$expire=0,$host='',$port=''){
    ! P, Y' _7 {9 Z- l: x8 u9 j$ L& Y
  6.     if(!$key||!$value) return false;
    % B0 b: Q9 a7 h2 S
  7.     $host = $host?$host:getenv('REDIS_HOST');
    - q* h" ~; j, H- R# m  P
  8.     $port = $port?$port:getenv('REDIS_PORT');& \8 l! ]( o8 D5 a0 W$ ]
  9.     $redis = new Redis();
    ) h! g7 T$ C1 d8 O, G7 w4 I1 U
  10.     $redis->connect($host, $port);) @( B& F+ I0 V7 H7 v9 }
  11.     $value = is_array($value)?json_encode($value):$value;* b0 Q! n* g& g$ i+ Y4 g
  12.     return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);
    , Z* r0 ^' n6 y
  13. }
    ' G9 N0 T7 s' {7 `' O0 a. u  n, T
  14. /**
    % W5 X+ g0 b+ w& h5 r
  15. * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi
    ' M+ ~$ z3 ]6 @- U# s; B
  16. */) {. L- k! J$ u; r- t
  17. function RedisGet($key,$host='',$port=''){7 @2 ?6 x" g7 Y# `& h7 N8 R, U
  18.     $redis = new Redis();- L7 L1 h; H4 P* [( @3 h
  19.     $host = $host?$host:getenv('REDIS_HOST');; e% J4 {- Q- U1 M5 L% K' a
  20.     $port = $port?$port:getenv('REDIS_PORT');( c  J  b7 P. p$ \4 G- {- F& d5 d
  21.     $redis->connect($host, $port);
    4 F+ o9 t2 }% B; o
  22.     $result = $redis->get(getenv('REDIS_PREFIX').$key);% U( f9 w5 u* O. @: v8 _
  23.     return is_null(json_decode($result))?$result:json_decode($result,true);4 t' D( i3 C  a
  24. }
    ) D; n2 y: q( r1 n* j4 L
复制代码
php操作redis大全,基本上php操作redis常用的函数都在下面了( w& W1 B  |6 @$ _
  1. setex 带生存时间的写入值& {/ U% E4 d. o7 c8 b
  2. $redis->setex('key', 3600, 'value');
    7 F4 \' a# l5 I4 h) B
  3. setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回1
    " `2 q  s) @% N+ q  d$ I% ]
  4. $redis->setnx('key', 'value');
      j. X* h6 A9 u6 P8 O- ^3 P1 e
  5. 返回已经删除key2 v5 M$ e3 C2 S& m$ J6 ?. j
  6. $redis->delete('key1'); 成功返回1失败返回09 z+ |* J' M3 y; f* C% V' I
  7. $redis->delete('key1','key2'); 删除两个键成功返回1失败返回0+ m( n4 v( v& X+ z1 Z! W$ ^
  8. 查询生存时间; ]7 |# V8 l. v( Q) {- ^
  9. $redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒)8 K# H5 D* \0 A( `4 E
  10. 同时给多个key赋值,同时设置key0和key1
    . |; J4 {3 }  }% J
  11. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));7 Z0 t+ x% Z* Y  {* N1 }
  12. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值9 U0 _* c4 C6 |! x/ R$ t: ?# ~" o5 G
  13. $redis->incr('key1');
    % }& S1 |  e: U( ^7 d1 F* n7 q
  14. $redis->incrBy('key1', 10);. h$ P. ~2 e7 G. w' C, [: U: u5 @
  15. 减法跟加法一样3 B7 Q( U( G7 d. r: u) u) e* F
  16. $redis->decr("key1"); 减少1
    & `  v  }  n3 z
  17. $redis->decrBy("key1",5) 减少5( s( b. R% p2 `" z/ M
  18. 5 \, H( U0 h7 B* H
  19. list相关操作,连表操作
    0 z  S, F$ {9 L% A/ X! D) ~7 K
  20. lPush7 J+ v3 n/ z1 {" u3 T% e: \$ [% M, t
  21. $redis->lPush("list", "888");1 l& G, y* I5 l" Q+ w
  22. $id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数
    7 x$ T6 a7 R2 J# v4 X
  23. $redi->lrange('list',0,-1); 返回全部数据,数组形式
    2 i" q: M* I# Z( k/ ?
  24. $redis->lrange('list',0.2); 返回连表0-2坐标的三个元素
    0 M, A/ X+ D  K' p
  25. lPushx/rPushx+ I2 S2 @7 s2 o0 r* M$ x7 P
  26. $redis->lPushx(key, value);
    5 c4 }% \( O% n$ y7 `' B1 I: Z( `
  27. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加
    7 ^; Z- K9 L4 v9 k

  28. , K; f; q8 P% ]
  29. $redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key& [' m8 f) ?6 ~, ~" s
  30. $redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key8 Y4 a3 S, d- ^. l
  31. $redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1- a1 T5 |/ R# M4 y4 o4 @
  32. 集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序' t& \& B& K: Q  \  T  v
  33. sadd s1 zhangsan
    5 }0 A, S7 }, i( p+ M
  34. sadd s1 lisi1 j" U9 M" U7 ]
  35. sadd s1 wangwu! L9 k, F) Q! D& a# q% `* x- M
  36. sadd t1 yangxingyi1 H. P9 }3 x. p& n0 Y% F
  37. sadd t1 lilei
    ! g9 h4 W* ~/ n, {% s
  38. sadd t1 zhangsan0 A7 |5 Y+ }4 y% x
  39. smembers s1 s1的所有集合内容
    % H  t2 }: v' p' r2 ^# S9 u
  40. sdiff s1 t1 s1有的,t1没有的,差集
    " o! w! S1 M) [3 ^/ O+ J" \5 ]
  41. $redis->sinter('s1','t1');返回s1和t1两个集合都有的,数组形式
    8 g# d* }  g3 I6 u# r) T) G
  42. scard s1 返回s1集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的
    0 s0 l, N$ J" Y9 l( X7 m
  43. spop抽奖场景,返回集合里面随机的数
    - J7 N7 M+ |6 G) P  a
  44. spop s1  默认返回1个,返回后就删除这个数,中奖了就不能再中了8 R1 {, ]; ^& u1 @* |) P
  45. $i = $redis->spop('s1');var_dump($i); 返回一个数,返回后删除这个数
    " r+ }' ]$ n1 p0 c; R/ B' a& g
  46. $i = $redis->spop('s1',2);var_dump($i);不能返回两个的,提示错误的
    / W. N  O, J6 i' H0 O
  47. 随机返回集合里面的一个元素,但不删除,重复中奖8 V, e3 P+ b( f" F0 o5 t* t
  48. $i = $redis->srandmember('s1');echo $i;; l8 I0 ~- \- `9 x
  49. sismember s1 zhangsan 查询张三在不在集合里面,在1,不在false
    5 x  P4 L# X4 N+ X, g- T3 g2 D# z
  50. $i = $redis->sismember('s1','zhangsan2');echo $i;在1,不在false9 c, ~. ]* O/ {9 ^/ g1 E, m
  51. $ p* n$ a6 P- U
  52. zadd key 2 value 有序集合
    " ~' |0 O; Y& \9 Q: U( T2 K4 W
  53. zadd y1 1 zhangsan;/ p. k$ N& o; F% R3 P8 V
  54. zadd y1 3 lisi;. c0 w  g$ m/ U
  55. zadd y1 2 wangwu;- C$ F! j0 T$ n' _9 s: o; T1 D, z
  56. zrange y1 0 -1; 排序就是,根据插入的时候的排序从小到达zhangsan,wangwu,lisi
    $ Q+ E& F" T) G2 J/ q  F  C7 [' [
  57. $i = $redis->zrange('y1',0,-1);var_dump($i);
      A2 U; E/ L+ u" _/ X3 M& L; M
  58. 返回数组,键值不是插入时候给的键,是从0开始的新键
    * L; T8 F) b; d* g
  59. zrevrange y1 0 -1; 反转排序,插入的时候键值越高,排序越优先
    ; B7 w  k% |/ [0 r, `! e3 [! W
  60. zcard y1 ;获取有序集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的$ _4 n1 v7 Q4 H+ ?- x" R1 O) H, i
  61. 无序就scard,有序就zcard,有z没有s: V" y* j& }0 E7 r/ N
  62. sInterStore9 m9 l; v/ y8 k% h' c0 s% E
  63. 求交集并将交集保存到output的集合
    7 A' w" [2 ]' g: C- ~9 j
  64. $redis->sInterStore('output', 'key1', 'key2', 'key3')
    , m0 N0 Q" P. V" R7 M' @& i

  65. " E, n; i; w9 N( y/ U; f- a* w
  66. Hash操作' _, r# U2 z+ O. k. e; u' Y
  67. hSet
    . C  o- F/ R0 X' T
  68. $redis->hSet('h', 'key1', 'hello');$ S+ ^* V- _" g% z7 _2 [8 A
  69. 向名称为h的hash中添加元素key1—>hello
    : `7 f/ w3 ?  d8 _, Z5 j

  70. % V" ~5 W8 \" U0 _( d2 X' [5 W% o
  71. hGet
    ) B0 l- _) u% \& w; ?9 Q
  72. $redis->hGet('h', 'key1');: \% N3 K3 c& U( a
  73. 返回名称为h的hash中key1对应的value(hello)
    % B% M  F: s4 u# H- ~
  74. - j5 H, c" n. h2 a
  75. hLen$ q9 W7 v2 K8 d( u5 p. \
  76. $redis->hLen('h');
    ' ?" ?8 j* n2 w1 x1 k
  77. 返回名称为h的hash中元素个数
    ; }( J% P% ], x0 C7 \
  78. 5 Q+ s9 |5 c: G& h0 c/ W
  79. hDel" i( O9 v9 m* w4 w" Q$ U4 `5 ]. i/ I- L
  80. $redis->hDel('h', 'key1');$ x% G( _2 v  H- k! A
  81. 删除名称为h的hash中键为key1的域
    5 y. [+ d! B) |6 X& r- ?
  82. 3 f& _9 m6 M6 z' Y1 f3 m. h
  83. hKeys& }3 L0 y$ H$ V- {6 V2 ^! d
  84. $redis->hKeys('h');2 n# M' R4 x2 s2 p1 g$ C, r% e8 ^
  85. 返回名称为key的hash中所有键
    7 ~, ?$ i9 P( O) B. M* O' X! M1 v
  86. ) |! P4 j! i& k2 ^4 y" H
  87. hVals
    ; @9 a5 @2 a: L( z, j
  88. $redis->hVals('h')! a5 \# E+ d3 P: J" {- W$ a
  89. 返回名称为h的hash中所有键对应的value
    2 k. \% I# d  z
  90. * {7 ~0 ^6 g- `4 }
  91. hGetAll
    " P) \! I# A& T6 W  O8 `6 |
  92. $redis->hGetAll('h');% }9 |% z: t$ U; v( l2 w
  93. 返回名称为h的hash中所有的键(field)及其对应的value
      z# Y- Z6 v  Z# W; y0 L) ^: K

  94. 1 R; S4 K) n8 x( G1 d9 a  Q
  95. hExists
    # u# J7 p+ x+ P; ?
  96. $redis->hExists('h', 'a');: B& C. d  q$ l) G0 H  K( B: ]9 |
  97. 名称为h的hash中是否存在键名字为a的域
    , \) z7 |$ n3 A, E! W. C9 U" f/ Q+ z, D
  98. $ g4 a  G! A1 b9 k6 t) |, j5 `9 N
  99. hIncrBy6 k9 J- \5 j1 N5 w! r2 e
  100. $redis->hIncrBy('h', 'x', 2);
    9 L* }# P, s# i1 }* |5 `
  101. 将名称为h的hash中x的value增加2/ V* T) j4 S- M3 D5 j9 q2 N2 I

  102. $ c  @% d) p  z( U- M
  103. hMset  e* o' b! M) G- s. l( ]
  104. $redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));/ E/ M. q: {' D1 _) E1 I- m" ~$ B
  105. 向名称为key的hash中批量添加元素# _3 a8 \, J9 N3 }% K
  106. # I' Y0 A* i4 q* ^
  107. hMGet
    - `' F2 @5 z' ~4 g" D' r* D! f$ U" s
  108. $redis->hmGet('h', array('field1', 'field2'));( O( v: J+ S% @, b
  109. 返回名称为h的hash中field1,field2对应的value; z1 ]6 r7 u/ y3 f

  110. 8 ~2 d& b' L8 D) M0 D! S! f
  111. redis 操作相关8 V5 C- M/ V* _4 V) l9 G+ d: e
  112. flushDB
    5 |4 R) U. b9 \& y  o+ o
  113. 清空当前数据库
    * Q/ X) I. k* w! G

  114. 6 O2 R6 v3 \2 b# n
  115. flushAll
    ( c# m: ]9 l5 ?1 T7 Q+ y4 r
  116. 清空所有数据库
    ' Z$ O1 O8 h) R

  117. 6 T& K( |" q% o  X
  118. randomKey
    : ^# c( ^6 k+ X
  119. 随机返回key空间的一个key
    $ z" x7 V9 C" V
  120. $key = $redis->randomKey();) {/ k% `# s( m9 L

  121. . `! T# H2 q5 K5 A2 t6 X
  122. select  P1 a& P1 j) Z! @! D
  123. 选择一个数据库# ?6 Q6 o% p* [' E
  124. move
    5 b) @' e, x! V, J- c5 K7 V3 L
  125. 转移一个key到另外一个数据库
    , t! i. @! ^/ p
  126. $redis->select(0); // switch to DB 0, C+ L' m( `2 [) Y; x
  127. $redis->set('x', '42'); // write 42 to x) I. M/ Q: G/ L8 n
  128. $redis->move('x', 1); // move to DB 1
    " D8 v8 ~4 j2 I4 F
  129. $redis->select(1); // switch to DB 11 e9 [* u/ d# X( a# T
  130. $redis->get('x'); // will return 42
    ( p( m7 V" u) |& F: L2 |! {2 O, u
  131. " e+ h& o+ ]2 x* k
  132. rename, renameKey
    ) N: F  ]/ n: B' ?' N3 W8 v/ y
  133. 给key重命名
    0 W. ^' a' {" P$ J" O
  134. $redis->set('x', '42');
    . q2 r. z! U- A5 G' W, q
  135. $redis->rename('x', 'y');
    : ^8 @8 l/ g: ^  X% s- j3 h1 K
  136. $redis->get('y'); // → 42
    % q  Z) q4 n. v" a" ~
  137. $redis->get('x'); // → `FALSE`
    ) X$ T, ?9 F( @1 ~+ J) j
  138. ; j2 y* `. T0 m7 K7 d
  139. renameNx
    5 h0 o: k1 }) c3 Q; h
  140. 与remane类似,但是,如果重新命名的名字已经存在,不会替换成功
    6 C: X% H; z# V! \, g
  141. 8 v. J9 I6 M; T- R. O; Q; b
  142. setTimeout, expire
    # _  C0 m( P) ^+ L  n# ^4 e
  143. 设定一个key的活动时间(s)2 q: R; _. S  _0 o) A) V
  144. $redis->setTimeout('x', 3);
    + s( `* M/ v1 X+ h

  145. 0 A7 c* b3 {8 i) W: T5 _: n" O
  146. expireAt2 ?; r4 m  T% L
  147. key存活到一个unix时间戳时间
    8 S6 B$ i0 W: G2 U) ]
  148. $redis->expireAt('x', time() + 3);8 D2 y% T9 v0 ~8 `  q* ~
  149. 3 X0 }$ j. @, b& g* A# @
  150. keys, getKeys
    5 @' I0 S4 ~: g6 [
  151. 返回满足给定pattern的所有key
    1 S+ c9 ]. A/ F0 }
  152. $keyWithUserPrefix = $redis->keys('user*');
    , p( N" V. z4 F# ^$ r8 T! k) _
  153. $ c9 X8 q$ E% q) ?  R& }9 u! p
  154. dbSize
    . O4 d( n$ L6 ~) T1 i, v2 a
  155. 查看现在数据库有多少key+ X7 m8 E; `' G* |
  156. $count = $redis->dbSize();; s+ p. U. U. K% n% g

  157. 0 o! d3 A/ N/ B8 n& v4 T8 J
  158. auth* y/ ^7 K1 m* l9 v' C" V
  159. 密码认证% g+ n& B  i3 X1 N  f9 S% J% [1 o0 t
  160. $redis->auth('foobared');
    % C$ f. T" M/ e6 ~7 I. F
  161. / Y$ n" O6 A5 Z, q0 _2 w
  162. bgrewriteaof, }4 w6 a) k) e. p& R! V& U
  163. 使用aof来进行数据库持久化! D. g. @5 {3 H+ I% W5 J
  164. $redis->bgrewriteaof();
      U' ^2 W2 Q" Q+ w
  165. . [' I* `4 c$ r  a/ a" D
  166. slaveof
    * h1 t5 o' I, @, Y/ v2 t
  167. 选择从服务器
    ; Z6 ^4 i* H, l6 B* Z
  168. $redis->slaveof('10.0.1.7', 6379);, Y. H  B+ `6 n# Q# R
  169. + F; o6 i0 z9 h$ B$ @6 o( d$ h0 t
  170. save
    1 {1 ]5 t; }% c* R" G+ i5 K
  171. 将数据同步保存到磁盘* ?& X. ~: m6 k$ O, B* Q  j
  172. % o7 q. ~4 e# t) O. X" e: D
  173. bgsave( j# c3 p" m% K2 h6 g+ o7 D0 }5 g
  174. 将数据异步保存到磁盘
    0 e$ Q. X$ T  j8 n2 U# d
  175. . S$ X4 M4 f/ Y& C
  176. lastSave- _9 ~9 _4 U$ X
  177. 返回上次成功将数据保存到磁盘的Unix时戳/ [' V! j; l9 j4 N$ O- z
  178. $ y0 I# J$ v: k
  179. info; `- }5 }+ t$ ~
  180. 返回redis的版本信息等详情
    4 Y5 q: a+ q) S1 P; k. Y

  181. 6 l6 G" t6 P6 N: v, k- L
  182. Redis::__construct构造函数
    5 b! x* K4 V8 a, P' q& U
  183. $redis = new Redis();
    : A% Q: I. W1 q/ N
  184. ! R1 }( z4 h- d* Z
  185. connect, open 链接redis服务& b' _! q7 B( f+ N: |- p' d
  186. 参数2 V- |$ ^0 N3 D( [
  187. host: string,服务地址, Y, k8 [( _5 i0 B3 g9 |6 f( L/ l
  188. port: int,端口号/ _/ j6 H7 n3 ]& F' z
  189. timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间), S, C4 Z( y" x
  190. 注: 在redis.conf中也有时间,默认为300
      E/ S2 y5 X0 U% F6 X5 o1 V
  191. ! o  A. {2 v2 Z; d" S
  192. pconnect, popen 不会主动关闭的链接
    : x$ i% G; m0 D+ I% E- L5 N  Z; y
  193. 参考上面
    $ L7 \# f9 R( K' N( U
  194. / G% @% n1 N) A+ N( I0 H
  195. setOption 设置redis模式1 z& q1 w( F3 T! F# {

  196. 1 w% c2 U; y6 p3 r9 |) Q9 c( Y
  197. getOption 查看redis设置的模式3 A' a1 `1 P+ u* ?9 ]

  198. * M& b. l$ h9 d
  199. ping 查看连接状态& `) k4 i+ t& H2 K
  200. 6 V' j; W* B& D) i4 y/ S' J
  201. get 得到某个key的值(string值)& _8 W  R5 {* ]& ]4 _
  202. 如果该key不存在,return false
    5 r1 |. d. L* F* R
  203. 8 ?5 ~4 P3 u0 k
  204. set 写入key 和 value(string值)& R2 h/ W! p4 g  l7 S/ h
  205. 如果写入成功,return ture
    , Q4 Q2 k( T3 H+ i: k6 _
  206. 3 {* e. S" H9 L* E9 Q3 z+ V
  207. setex 带生存时间的写入值# R! p' [& K& p8 K2 y+ e- n9 v
  208. $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.
    + i1 s, G& [6 q

  209. ' F& P! p0 I+ D& ^- \' @* _- T
  210. setnx 判断是否重复的,写入值; n( l4 \7 e8 t; h* ?' ]
  211. $redis->setnx('key', 'value');
    : G2 p: ?8 p9 ~0 y. d
  212. $redis->setnx('key', 'value');
    # G; Z' {  I& O) K3 X
  213. - a- g2 r6 \* c! x
  214. delete  删除指定key的值
    $ m* N8 h6 E! l- H  `/ Z5 V
  215. 返回已经删除key的个数(长整数)2 R( P" {4 v  k! @& X9 ^, |
  216. $redis->delete('key1', 'key2');; \% p( v: W( z9 a" `7 R
  217. $redis->delete(array('key3', 'key4', 'key5'));
    ' ?6 @; ^" R1 `6 }5 |: }# r
  218. 1 ~$ Q4 p1 O$ t: e: p; Q
  219. ttl4 f5 ^/ G9 c, Y" ]8 T4 f& ^1 |) [
  220. 得到一个key的生存时间
    & `. t( C. _% z
  221. 9 _: t* g$ P/ b! i; p  o+ p, p
  222. persist! n8 |0 g- B9 _' m
  223. 移除生存时间到期的key
    8 [/ q4 K+ o: B. @/ h4 g- e9 t
  224. 如果key到期 true 如果不到期 false
    4 J# B' w$ }2 U; N
  225. $ h$ c' n5 c) h' D
  226. mset (redis版本1.1以上才可以用)
    5 `( f% u- x, Z( |3 [0 c
  227. 同时给多个key赋值
    . @9 M# a3 s( i2 z4 a0 e; E9 s
  228. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
    " ~/ S3 H0 Y$ W5 h% o+ I
  229. ' {) h. z3 F) b5 L
  230. * t/ ]! C9 ~9 h# i  \" I' T
  231. ! F, U" S' p, X( `4 X6 e9 Q
  232. multi, exec, discard( Z$ x  [2 W  e
  233. 进入或者退出事务模式
    * d' I( n9 M$ U
  234. 参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
    + ~' i& l) _( {7 t* c5 s
  235. Redis::MULTI:将多个操作当成一个事务执行2 e4 a5 Z( N/ P* h
  236. Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证+ b# w' l* o( E% Q7 H3 f
  237. discard:删除一个事务
    * L: ]7 p' x9 }3 W# C0 o3 \, h- g  L
  238. 返回值5 O. ?, F% V9 f
  239. multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。
    4 l3 W4 `+ M( k  v2 c
  240. $ b5 v) h5 Q- i, |# w: d- Y6 y. V# F
  241. watch, unwatch (代码测试后,不能达到所说的效果)
    6 c6 w; u* j4 k% ]5 ?( C1 l
  242. 监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)
    + }5 H. i( j! r/ L1 F
  243. unwatch  取消被这个程序监测的所有key
      N; ^$ d' t% M  J2 C; l
  244. 参数,一对key的列表" C& S1 K0 A0 N: n  {
  245. $redis->watch('x');- g$ ]! ^1 ], G

  246. ) U  |8 j. u6 ~& K) t5 D% Z( v9 C" Z
  247. $ret = $redis->multi() ->incr('x') ->exec();
    + _7 Q0 ^0 M" C* _

  248. 5 {% o: P$ g9 D1 b! v8 _! [8 @* y

  249. 0 [1 r, y8 P( a7 _+ n  W
  250. subscribe *
    : U0 W! @& J+ j$ `* U6 e! n  |
  251. 方法回调。注意,该方法可能在未来里发生改变
    * d2 B6 `! |/ z% X4 L7 v, s: O
  252.   h$ F& K; x6 r& y
  253. publish *
    % D% Q. j2 u8 E8 Z' R# n
  254. 发表内容到某一个通道。注意,该方法可能在未来里发生改变
    " U/ m  V" |7 H2 P
  255. & c  O% e9 q" k" z! T# N2 m3 a
  256. exists
    . l* ~3 a9 g: |  ^2 Q: C" {, z
  257. 判断key是否存在。存在 true 不在 false- ?2 c" J1 C: S/ p  _/ h) N, N

  258. ' c2 w4 j$ C5 {- B+ }2 s
  259. incr, incrBy& p1 k3 x6 Y7 O" b* I  t
  260. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
    & ^; ]% ^2 s& l: n
  261. $redis->incr('key1');
    2 i$ e. N% s6 \  a* m, c# e* J
  262. $redis->incrBy('key1', 10);
    5 f5 H! x, F& {! k
  263. * I" D7 a8 }, P& d* B* t
  264. decr, decrBy- _- w- p% N2 V
  265. 做减法,使用方法同incr1 |/ }" Z: A- e% p

  266. & J0 _( o% f3 c  P5 `
  267. getMultiple- S- L5 N4 ~9 C
  268. 传参
    * I6 {6 x( u+ W( ^. p9 A: H
  269. 由key组成的数组
    % o$ E( P' ~" b% G) y
  270. 返回参数
    , W+ J: t$ O, ?0 D/ f  n
  271. 如果key存在返回value,不存在返回false
    5 s/ n: E: u4 o7 @
  272. $redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));
    ) q) L. k. ~" k# J1 p5 `
  273. $redis->lRem('key1', 'A', 2);
    ' Y" a' c8 o3 j1 h/ p& O) G1 D" E  x
  274. $redis->lRange('key1', 0, -1);
    " a. Y# K$ d& s. s7 l5 R
  275. % P8 T) G/ [# X& H
  276. list相关操作( w) S1 Z. f! L  \
  277. lPush: c4 h) I' @! @- G  ?
  278. $redis->lPush(key, value);
    7 z& O3 {) w6 J1 X
  279. 在名称为key的list左边(头)添加一个值为value的 元素1 F: t3 i' h/ v- T
  280. ' Q2 Y! u8 L7 p- Q
  281. rPush
    6 t" G( j9 V% k% f! P) o
  282. $redis->rPush(key, value);
    + ?3 ^+ ~0 L1 A4 Q% j& H9 X1 P
  283. 在名称为key的list右边(尾)添加一个值为value的 元素7 J2 A, p9 i4 B1 E. f: O' Z& \) \

  284. & \2 I4 \3 V( v# R8 Y7 x
  285. lPushx/rPushx
    " b/ E8 x  s) G1 j
  286. $redis->lPushx(key, value);  Z/ Y  d: z) c  M- X: g5 T. ~2 k; U
  287. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加2 `2 ?* b& X, z" h

  288. 2 r+ ^* i! a( }+ @
  289. lPop/rPop
    ' q; B5 q9 V! E" P9 Z. v+ O
  290. $redis->lPop('key');0 u6 v% i+ M2 k$ `
  291. 输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素
    $ i: j( a" o$ q# ~% d- }5 D
  292. + v" W3 ^$ N1 u0 S
  293. blPop/brPop! J9 \5 t8 v+ w' a
  294. $redis->blPop('key1', 'key2', 10);2 {  n3 b% T. w- `& P5 h. I0 n
  295. lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作
    0 U2 n' V+ T8 L7 I6 r3 z4 n: j  l4 K

  296. 8 ]; E3 M/ J8 F( I  r2 N4 j
  297. lSize
    7 ?& n, }/ n" y/ f8 ~
  298. $redis->lSize('key');
    . `/ j4 l- O( h7 J; W* _" N7 @
  299. 返回名称为key的list有多少个元素$ }+ W3 b* G* @8 l; @

  300. 0 x; M$ H. T# s1 j; _- ^
  301. lIndex, lGet  @) A, }1 ?$ o. {; J* q# p
  302. $redis->lGet('key', 0);: A9 c5 Y3 q0 S" r
  303. 返回名称为key的list中index位置的元素
    " y; t$ f0 t. P. I( `

  304. + |' B" m+ {: `: B
  305. lSet
    : V/ \% l9 d, g& ~0 A( e2 [* R
  306. $redis->lSet('key', 0, 'X');
    & v7 Q. J6 o+ x
  307. 给名称为key的list中index位置的元素赋值为value
    ) I. U  N7 z" |$ e5 |7 D' s6 R
  308. ! u" @( w+ H2 h( w
  309. lRange, lGetRange. `5 O) q  r3 w7 @( J' w2 [
  310. $redis->lRange('key1', 0, -1);
    ' C3 J7 y! j: e/ t
  311. 返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)
    ! a) y) {( C( r. M
  312. 2 \8 x" b0 w: Z" L: d
  313. lTrim, listTrim! [" x: Y6 o) m8 f2 T( e+ ^
  314. $redis->lTrim('key', start, end);' S) Y( J% X! v% `% _% K
  315. 截取名称为key的list,保留start至end之间的元素- S: g8 x1 F+ B$ x

  316. ' z7 n8 I- D" a' h4 D
  317. lRem, lRemove
    2 K8 ~2 V! Q% l* l( B7 T: j. {$ D
  318. $redis->lRem('key', 'A', 2);
    2 v2 {8 m' v* F
  319. 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素% w! z4 B0 I' o
  320. 6 h+ x- \# Y; j8 U: d; q8 |
  321. lInsert3 a, c1 @: g$ k& H0 M. R3 W
  322. 在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -1
    7 G. Y7 |/ U% `/ o
  323. $redis->delete('key1'); $redis->lInsert('key1', Redis::AFTER, 'A', 'X'); $redis->lPush('key1', 'A'); $redis->lPush('key1', 'B'); $redis->lPush('key1', 'C'); $redis->lInsert('key1', Redis::BEFORE, 'C', 'X');/ F2 T8 W8 y1 V% S9 G9 f
  324. $redis->lRange('key1', 0, -1);
    / T! P; J8 c8 X" i2 ]" p  N
  325. $redis->lInsert('key1', Redis::AFTER, 'C', 'Y');# w7 N! R  q2 v/ z. |, ]- p& R
  326. $redis->lRange('key1', 0, -1);
    . {9 E0 X2 B1 J' X
  327. $redis->lInsert('key1', Redis::AFTER, 'W', 'value');$ s1 B* A! q+ _" k
  328. ; ?# S. K# v  {$ i) i5 g' k* w
  329. rpoplpush
    4 {/ R  A; m; {+ i' Y9 L* M  [5 R
  330. 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部, C. g& b$ J* X  P3 t- m0 g
  331. $redis->delete('x', 'y');2 w8 v6 w/ W/ v1 Q/ N; W
  332. $redis->lPush('x', 'abc'); $redis->lPush('x', 'def'); $redis->lPush('y', '123'); $redis->lPush('y', '456'); // move the last of x to the front of y. var_dump($redis->rpoplpush('x', 'y'));# z% p6 @% V( @3 ]
  333. var_dump($redis->lRange('x', 0, -1));
    - o; w6 X/ e- g3 z
  334. var_dump($redis->lRange('y', 0, -1)); 9 D' }. m; J, l( d
  335. 4 H; ~8 x3 A' Z3 X/ E
  336. string(3) "abc"
    - u, b+ ^# K0 u7 R: m
  337. array(1) { [0]=> string(3) "def" } 2 {# L$ \9 f( Q6 _3 C% K
  338. array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }
    * }. c, }4 b% ?& \: J' o
  339. # b6 r8 @- K! ^" n& x
  340. SET操作相关, h6 R+ \5 ]4 f& ^! Z& Z. J7 D
  341. sAdd3 N4 Z3 @3 a5 s" u, p: D4 e! u
  342. 向名称为key的set中添加元素value,如果value存在,不写入,return false
    2 L. Z0 J3 ]: ~  U
  343. $redis->sAdd(key , value);
    , H, V; ]) ^5 a5 j& E  |. w' K9 _
  344. % w4 O3 X% i  j8 O; v( P# k
  345. sRem, sRemove
    9 m, o& O( ~. O
  346. 删除名称为key的set中的元素value3 R& J* H2 D3 Q- V
  347. $redis->sAdd('key1' , 'set1');
    0 ?8 N+ ?0 h; n  C
  348. $redis->sAdd('key1' , 'set2');; o1 W# u5 E; `  y: W& j- e: R
  349. $redis->sAdd('key1' , 'set3');! [5 ]7 B6 A$ E& G1 @6 W
  350. $redis->sRem('key1', 'set2');
    + P, N: L0 C: D& \3 B! w3 ^. E
  351. ! |7 }2 \9 r% d( Q
  352. sMove6 }0 ^) @. @9 b/ P$ a
  353. 将value元素从名称为srckey的集合移到名称为dstkey的集合! Z6 m. r" i0 I1 {
  354. $redis->sMove(seckey, dstkey, value);
    ) R, f5 E/ F/ I  v" f7 G
  355. * D3 s1 E! H9 R# v
  356. sIsMember, sContains. G3 L% ~7 R7 _$ E" z& D- W8 S
  357. 名称为key的集合中查找是否有value元素,有ture 没有 false
    . j: S( |) y. t
  358. $redis->sIsMember(key, value);5 ]3 g4 \& O) X: I" m

  359. 4 ]" n- _! ~6 G/ t9 D  n8 f
  360. sCard, sSize4 u% e5 H7 a- j- G2 G# e2 ^; V" X
  361. 返回名称为key的set的元素个数+ B$ j- t* T1 h; ]- G4 [# q9 b
  362. 6 ~& Z4 P" ]6 m* {  w# a: b- m
  363. sPop
    $ T! V6 V2 W% d/ w$ e
  364. 随机返回并删除名称为key的set中一个元素
    - S5 l5 r8 a$ `
  365. - K; V" y" ]- V+ N% R
  366. sRandMember6 J' j( Q, d  m; E
  367. 随机返回名称为key的set中一个元素,不删除- b3 G0 p% Z' S6 s! g- M$ |

  368. $ t. e& x) }9 M# b. X& v$ f
  369. sInter
    ! L$ G2 ~. h! a1 a6 o# `' Q
  370. 求交集
    ! j0 U' T% \) \2 @- n

  371. " ?9 C0 I9 a# h9 }) s
  372. sInterStore
    8 k4 d+ j$ V+ b4 ~& ^
  373. 求交集并将交集保存到output的集合
      r; o/ ~0 d! W) v' N4 x( p
  374. $redis->sInterStore('output', 'key1', 'key2', 'key3')4 X/ u# i7 O. G- v+ Y; o/ c

  375. 0 x: H* _% }' q1 [+ p, L% ]: c2 ~
  376. sUnion
    ) F, m3 ?5 Y/ F/ T
  377. 求并集" Q5 B6 l% N- T8 _. j6 v) o
  378. $redis->sUnion('s0', 's1', 's2');
    , a& E! \; ~8 L1 L5 R
  379. s0,s1,s2 同时求并集5 x# ?& J% c  y+ }% G3 ]9 }
  380. $ {% w: d; ]$ Y8 H. p& j4 ~
  381. sUnionStore6 Q! j! j# d$ M$ t) Z5 c9 i3 `
  382. 求并集并将并集保存到output的集合
    : F, [/ |. l' p8 O
  383. $redis->sUnionStore('output', 'key1', 'key2', 'key3');4 P+ q4 P! v: q9 E

  384. ( x! g/ s, |! s% d* ]
  385. sDiff6 s, \3 X' a" U) C/ v# t; I. G
  386. 求差集( ]+ E, t/ A& b0 n9 Q/ ^  @
  387. ! |! r( I" X1 C1 v* \
  388. sDiffStore, [, q0 {4 S5 W' O
  389. 求差集并将差集保存到output的集合2 w' r4 O+ w, k) Y3 {. D
  390. / o6 ]- `8 O' N5 ?6 a4 E# V# R- |
  391. sMembers, sGetMembers
    ' `- f$ n9 N# L$ m+ Q! Z+ l
  392. 返回名称为key的set的所有元素; T+ V  b3 V) S0 T/ _9 U0 g

  393. 9 T; |3 [( \8 b1 z6 _# h( |# _. e
  394. sort% b: \9 W& T" P! t9 ?3 _0 \6 T
  395. 排序,分页等4 P+ p' @9 ~& D; n* G* w4 s& {
  396. 参数2 j2 R" _7 p( x" Z: e/ y
  397. 'by' => 'some_pattern_*',$ |# {5 V$ I( p5 f+ Z/ Q
  398. 'limit' => array(0, 1),
    % x9 R0 i# q. m; N8 B# N4 y  V7 I
  399. 'get' => 'some_other_pattern_*' or an array of patterns," w' L7 e" ~  s: r9 p$ C. ]' |
  400. 'sort' => 'asc' or 'desc',
    $ C) a3 h' V0 b* J
  401. 'alpha' => TRUE,
    ) s4 X; P4 M; f  Q+ B" p  }
  402. 'store' => 'external-key'$ r  ], {2 J6 _& t* @: a
  403. 例子
    & ?/ O2 g% [7 w$ e/ _
  404. $redis->delete('s'); $redis->sadd('s', 5); $redis->sadd('s', 4); $redis->sadd('s', 2); $redis->sadd('s', 1); $redis->sadd('s', 3);3 e6 ^. w+ @& N: n  b6 e' d
  405. var_dump($redis->sort('s')); // 1,2,3,4,5
    # A+ ~# }2 A/ _8 \# m  D# @9 ]% [, `
  406. var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
    1 v8 Z  n2 O0 X: g
  407. var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5
    : D* s2 p7 F, E, b1 E2 j
  408. ; i0 L# J  h9 N" L7 w+ J
  409. string命令* }6 |$ _3 n  O6 q
  410. getSet, H! \5 t- X6 y2 I  `
  411. 返回原来key中的值,并将value写入key
    $ H$ [2 G. E; c3 f9 Z3 n
  412. $redis->set('x', '42');. ^3 U7 x- f8 T
  413. $exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'& x& H0 W/ g$ Y3 ?
  414. $newValue = $redis->get('x')' // return 'lol'
    7 N' e8 a; ~' o- h
  415. 2 F3 H! M  ]5 G
  416. append) @/ _+ b2 d! _( @1 z
  417. string,名称为key的string的值在后面加上value" D) c- J7 w2 G1 h. S% d8 S# Z
  418. $redis->set('key', 'value1');6 m- e; y! W1 F: A' H
  419. $redis->append('key', 'value2');
    0 C& W6 k6 p5 w( o& Z" f
  420. $redis->get('key');
    4 ]: [! n3 L7 }  h8 F8 L* Z

  421. 4 n  F. u; h8 F
  422. getRange (方法不存在); y1 K( c3 b/ B
  423. 返回名称为key的string中start至end之间的字符
    . N( L4 y' D5 l/ ]
  424. $redis->set('key', 'string value');
    ! d2 F8 k/ x- ~& a
  425. $redis->getRange('key', 0, 5);4 ?( P" N9 p* X% n# a( {( }) `
  426. $redis->getRange('key', -5, -1);
    / Y0 R- n5 y1 l6 ^& M

  427. 2 r* h) Q% `$ w
  428. setRange (方法不存在)  M  I& w0 X& ~- ?0 R
  429. 改变key的string中start至end之间的字符为value
    7 @& G1 C( c" u
  430. $redis->set('key', 'Hello world');
    - A$ f+ R0 j) G4 `
  431. $redis->setRange('key', 6, "redis");( C' d9 N# W: Q) x: C, ~) D
  432. $redis->get('key');
      g/ F0 B' r3 z$ V
  433. $ {1 L: }9 V; O$ O
  434. strlen
    % k+ Q! X3 z8 Y8 f5 x. z( Y! V
  435. 得到key的string的长度6 L! \! l* g' O0 G
  436. $redis->strlen('key');8 f5 Z5 h8 M" ?4 C4 h

  437. " i  g2 G0 X4 z  p9 n& ^
  438. getBit/setBit+ O, `- r  d( P! q
  439. 返回2进制信息
    . p$ z' a) _1 P0 K5 {5 q

  440. + E1 @2 @& E% g: Q0 k
  441. zset(sorted set)操作相关+ _; u+ |$ {* x! B! r, C+ ^
  442. zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。" O0 e0 r& Y: X& e' l
  443. $redis->zAdd('key', 1, 'val1');
    ! E' b' B( i+ \" e$ o3 ^
  444. $redis->zAdd('key', 0, 'val0');
    3 l. g: G0 ^5 W( A
  445. $redis->zAdd('key', 5, 'val5');! @/ l9 U% E2 r& g( n
  446. $redis->zRange('key', 0, -1); // array(val0, val1, val5)7 ^) m" h& L9 d( j) M

  447. 7 i7 c4 S6 M# O3 r" R$ _9 @. m, w
  448. zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    . r1 H5 ^+ m: s
  449. $redis->zAdd('key1', 0, 'val0');- }6 m6 X' Z1 W7 U" \
  450. $redis->zAdd('key1', 2, 'val2');' l3 F4 K- s* r! D* D
  451. $redis->zAdd('key1', 10, 'val10');0 V1 Y. R% g: o! i( x$ Z* W
  452. $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);: V8 @& w$ h0 v0 V2 [

  453.   u2 e, E( q. v' v/ p8 {, f. `) U2 x8 _
  454. zDelete, zRem6 N3 Q& @( v. d0 I! @0 J
  455. zRem(key, member) :删除名称为key的zset中的元素member! a, d0 v0 b! h8 |9 F/ n7 T5 x# S
  456. $redis->zAdd('key', 0, 'val0');3 s) _9 A" |. W( {6 ^8 r0 T. E
  457. $redis->zAdd('key', 2, 'val2');
    3 N, e0 p3 o% K1 t
  458. $redis->zAdd('key', 10, 'val10');, w6 a& I% `' s& J$ O- d
  459. $redis->zDelete('key', 'val2');) E$ L6 ?8 n+ P; C; P, F
  460. $redis->zRange('key', 0, -1);
    1 O/ {$ J) u! E( M$ G
  461. * j- P) f/ H# `+ i5 w* O
  462. zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出
    1 U1 G% i$ f. P) y. v
  463. $redis->zAdd('key', 0, 'val0');7 U+ b: ^3 s0 s$ ?4 _# I+ S6 T
  464. $redis->zAdd('key', 2, 'val2');: v! \2 P& V& ]6 R+ j2 j
  465. $redis->zAdd('key', 10, 'val10');9 S" Z# D; a: ]* z4 k, w4 N
  466. $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);
    & d2 s( q4 C4 I
  467. 5 o8 f- C2 W; I+ d. z# s
  468. zRangeByScore, zRevRangeByScore1 u: j, U! l2 v+ @8 P$ u
  469. $redis->zRangeByScore(key, star, end, array(withscores, limit ));
    2 b" p$ [' V6 R7 k
  470. 返回名称为key的zset中score >= star且score <= end的所有元素
    2 e- ?5 p4 s% j
  471. & v; E# E& {$ |  D6 {0 J! h. m
  472. zCount' U1 J# Y' l1 p: w' }( L
  473. $redis->zCount(key, star, end);
    + x' b' Q1 [# N. |+ f
  474. 返回名称为key的zset中score >= star且score <= end的所有元素的个数
    1 w% t/ j5 G5 ^5 d) n1 r
  475. 2 B9 H& D" }( @# N1 p; S
  476. zRemRangeByScore, zDeleteRangeByScore+ N! H$ ?$ d) g
  477. $redis->zRemRangeByScore('key', star, end);- E% w, j9 `/ `: C* O( ~# ], c, C- e
  478. 删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数
      ~' |  E6 F) ^5 p
  479. , u' y+ q0 H2 n2 g; K( @; V. Y
  480. zSize, zCard! R. M$ X) Z" j# {! }& J
  481. 返回名称为key的zset的所有元素的个数
    : J/ V: |3 h. ^) a  E* B( S, o
  482. ' y! @3 ^# y" Q) N
  483. zScore& w; K$ f8 w0 Q: T
  484. $redis->zScore(key, val2);9 @7 |, x0 @, f
  485. 返回名称为key的zset中元素val2的score
      |4 J6 B# g, H! R; Q1 O% Z

  486. # c4 X3 [! l' T6 Y& _- ~
  487. zRank, zRevRank
    / m1 G4 \/ g7 X) N4 {
  488. $redis->zRevRank(key, val);
    ! L$ @' h. d5 m! O' I) T  P0 \5 N
  489. 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序
    3 T% \" X3 E' N; [2 V
  490. 0 S# _9 A) {3 r) ?+ p
  491. zIncrBy
    : h$ a! c' a- \+ W0 ^
  492. $redis->zIncrBy('key', increment, 'member');
    : u7 y7 ^8 v  W/ p
  493. 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment9 S. c; }: M5 B! x! U. Z; X0 }+ C3 E. Y

  494. 2 k+ `- Z/ _  b- @% K
  495. zUnion/zInter
    3 x( v8 M% @- X" O( f4 p; f; y
  496. 参数
    $ k2 U/ Q( o6 g' W, q
  497. keyOutput: @, V1 d. Y3 o2 l5 X! ]
  498. arrayZSetKeys* a0 C: G3 i; p7 e0 r% }
  499. arrayWeights
    . }" C8 i1 d3 |, r& Y
  500. aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.# _4 X5 S1 v( O( }- B
  501. 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
    . l/ r4 E/ I7 ?4 v* q7 K1 Z& ~
复制代码
1 x0 d" Z. o# e# q
7 r$ _& J& k0 O+ h8 z, W! E2 J
5 I; Y! v; }+ [5 h5 ^' T
8 n# Y) L8 x: T: e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
沙发
 楼主| 发表于 2019-11-26 17:06:33 | 只看该作者
  1. $redis = new Redis();
    4 j: L; w/ T) J8 Y% Q
  2. //连接redis服务器 + \) G7 o4 t3 d1 y+ M" U
  3. $redis->connect('127.0.0.1', '6379');
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:45 , Processed in 0.058185 second(s), 18 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!