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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-11-26 16:58:27 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  1. **php.ini文件添加:extension=php_redis.dll  重启php, phpinfo可以看到redis则证明安装成功**
复制代码
php连接redis测试
  1. <?php; K& G  G2 ]6 R9 r( ^) n
  2. $redis = new Redis();  
    ( m3 A0 Z. z  }* d! w
  3. $redis->connect('127.0.0.1', 6379);//serverip port
    ' U- W5 M' g. x' _* z# L( X4 S/ c) s; r
  4. $redis->auth('mypassword');//my redis password : }5 k' W3 e1 p5 W( o7 t
  5. $redis ->set( "test" , "Hello World");  : w! d! x. ]2 E6 p5 _3 _- v
  6. echo $redis ->get( "test");# }" z2 R! s/ f5 A
复制代码
php操作redis函数封装
  1. /**
    9 c# [( ~8 l1 g
  2. * 如果不传入$host和$port默认读取Laravel环境变量的参数/ a- e1 }  ~; U% U
  3. * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi/ k" S2 v- x" K' F& |
  4. */) N% n0 f% E9 m) h# z
  5. function RedisSet($key,$value,$expire=0,$host='',$port=''){
      ]7 G* `" V3 R9 ?& m. W) n
  6.     if(!$key||!$value) return false;
    & K; [; }- d8 t+ Y1 n% U
  7.     $host = $host?$host:getenv('REDIS_HOST');
    / m8 O' N! ^& f5 V3 Q/ i
  8.     $port = $port?$port:getenv('REDIS_PORT');
    9 F1 X( ?4 P% _
  9.     $redis = new Redis();
    % }: e- Q( N( ^8 d8 |# K( b
  10.     $redis->connect($host, $port);9 b. P: ?6 s& N) ^
  11.     $value = is_array($value)?json_encode($value):$value;8 d# f  Y6 x% V; L0 p
  12.     return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);- X; a0 x7 M) u9 P" B6 ^5 G; Q: m+ T
  13. }8 V# Q, w4 F/ [
  14. /**
    9 a: G% p0 U& r$ G
  15. * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi
    9 P) i& A5 y1 L7 F
  16. */# [- ?+ v# G: |
  17. function RedisGet($key,$host='',$port=''){6 u) s: O% f5 r. B5 ^! M: h
  18.     $redis = new Redis();
    2 U& m# w/ ?& X& y0 R, w. K
  19.     $host = $host?$host:getenv('REDIS_HOST');
    $ L8 j$ S- x, B# I( T
  20.     $port = $port?$port:getenv('REDIS_PORT');
    0 A& i$ B* l) J: q! G8 k
  21.     $redis->connect($host, $port);$ a! R% Z: e5 Z( v9 K' B/ s& w1 H2 ?
  22.     $result = $redis->get(getenv('REDIS_PREFIX').$key);& \: }' ~- }. _  Y7 H) O
  23.     return is_null(json_decode($result))?$result:json_decode($result,true);( H% w, R& }1 J0 T2 ^4 Y" ]0 \/ P+ s
  24. }
    ! g/ }  e4 @9 q/ x, W+ e9 S
复制代码
php操作redis大全,基本上php操作redis常用的函数都在下面了
' c# d" A; N6 l. |8 a7 k, b" C
  1. setex 带生存时间的写入值
    / P1 I; j3 B+ m/ a6 N; C
  2. $redis->setex('key', 3600, 'value'); 9 o" E2 G/ p. j# g; k; K3 [
  3. setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回1+ Z. d# n6 {$ b& q7 ^
  4. $redis->setnx('key', 'value');
    $ I! L- b+ w3 z" K1 D4 ]& N  |
  5. 返回已经删除key# k' e% R5 O$ \1 O3 s, r9 ~
  6. $redis->delete('key1'); 成功返回1失败返回0
    , e$ r3 D% U& [5 ~/ B5 p
  7. $redis->delete('key1','key2'); 删除两个键成功返回1失败返回0/ ]+ {) B! k. C& ]) M9 k
  8. 查询生存时间5 Z% r' f5 ~$ O0 d7 G
  9. $redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒)
    , q" X8 x9 I9 {5 W- w& q
  10. 同时给多个key赋值,同时设置key0和key13 ]' Y3 W' g! e: u- F9 @2 K
  11. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
      \, d8 O( W9 K: U8 s0 P% H% w. C
  12. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值, u  @2 B8 E8 T, j- d
  13. $redis->incr('key1');
    2 K/ V! U$ K- }% H# |$ r
  14. $redis->incrBy('key1', 10);, ?0 b0 V1 ^" E- N3 M3 E
  15. 减法跟加法一样* W8 `: N, _9 o
  16. $redis->decr("key1"); 减少1/ N7 j! m% I- K( g
  17. $redis->decrBy("key1",5) 减少5
    7 s/ B6 z7 P/ I" a& B$ ]

  18. 0 Q1 O$ O- L" q8 t6 `) `8 ?7 c
  19. list相关操作,连表操作
    5 D: q0 \/ w7 }# L2 S8 L
  20. lPush% A, Z# p8 D/ p0 v1 d
  21. $redis->lPush("list", "888");7 D- n" M9 P; M/ n& s3 B3 c+ k1 K
  22. $id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数" X  X9 b% F& [. k% N5 A7 U
  23. $redi->lrange('list',0,-1); 返回全部数据,数组形式+ W% [# x" _0 F
  24. $redis->lrange('list',0.2); 返回连表0-2坐标的三个元素
    * {! I! a  C) s$ F
  25. lPushx/rPushx5 _8 n; n0 K7 h1 g2 \6 p
  26. $redis->lPushx(key, value);7 x; V8 }/ S0 L6 w  i
  27. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加$ y+ O0 s; P, n9 r
  28. # g+ S8 S+ H2 P) ^- Y8 A: e& P$ h
  29. $redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key
    ' @( Z* |% t. R2 U
  30. $redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key) _6 ?; ?3 V+ P
  31. $redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1
    ; ~9 D- P5 ^5 d9 _0 Y5 U; c/ o
  32. 集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序
    9 E9 {+ m) o' J8 Q4 l) e0 V( M
  33. sadd s1 zhangsan7 M2 ]* T) n( l7 R8 T. E* n, r
  34. sadd s1 lisi
      T# K* }  \- k& {
  35. sadd s1 wangwu
    1 @/ F0 t$ P7 u  ]- l9 n& H
  36. sadd t1 yangxingyi
    # U" v5 l) \& w3 `& r6 y
  37. sadd t1 lilei1 p% N) R! S) G1 f" J
  38. sadd t1 zhangsan" J' s. H+ i4 e$ B/ M3 Q5 {; M
  39. smembers s1 s1的所有集合内容
    7 O: a- @4 |! ]0 Z( i: Q% P1 ?4 Q
  40. sdiff s1 t1 s1有的,t1没有的,差集
    + N1 h1 w2 h# }, T( N; O
  41. $redis->sinter('s1','t1');返回s1和t1两个集合都有的,数组形式7 v2 H8 a6 k  n8 q0 Z+ y. [, k  w5 b
  42. scard s1 返回s1集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的
    6 r6 x1 ^$ f- x& R) v  V3 N
  43. spop抽奖场景,返回集合里面随机的数) M/ }5 a/ s4 r' ]" i' w# y2 W6 t' a
  44. spop s1  默认返回1个,返回后就删除这个数,中奖了就不能再中了
    6 y7 Z! Z1 l) N2 x0 X) E- |* b
  45. $i = $redis->spop('s1');var_dump($i); 返回一个数,返回后删除这个数' F/ q1 K. ?7 v1 S5 a3 U
  46. $i = $redis->spop('s1',2);var_dump($i);不能返回两个的,提示错误的
    ! z; [! O4 Z% t/ z. Z6 m/ ]; k
  47. 随机返回集合里面的一个元素,但不删除,重复中奖. E& W. |% y7 s& H5 G1 ]/ Z
  48. $i = $redis->srandmember('s1');echo $i;
    * r, J( X9 b& d: p/ v
  49. sismember s1 zhangsan 查询张三在不在集合里面,在1,不在false
    : |  D/ @/ X+ c' Z6 k) e
  50. $i = $redis->sismember('s1','zhangsan2');echo $i;在1,不在false
    % [" X. l# u1 B- @, A

  51. 3 [9 T, [. w9 H7 Y. Z' R: f
  52. zadd key 2 value 有序集合. R* e" s2 f( @& C
  53. zadd y1 1 zhangsan;) s) N$ V8 w- E: Q/ K
  54. zadd y1 3 lisi;0 ]1 P& t/ {/ s' h9 s
  55. zadd y1 2 wangwu;
    9 z# U$ R* `9 s( ?" k9 |
  56. zrange y1 0 -1; 排序就是,根据插入的时候的排序从小到达zhangsan,wangwu,lisi
    / c7 L8 n. Z/ B2 P1 n3 F" J
  57. $i = $redis->zrange('y1',0,-1);var_dump($i);
    * E- G( d* ^+ d; {
  58. 返回数组,键值不是插入时候给的键,是从0开始的新键$ c3 C; i+ ~9 q3 ^
  59. zrevrange y1 0 -1; 反转排序,插入的时候键值越高,排序越优先% O9 S' j. |2 g; m
  60. zcard y1 ;获取有序集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的' A' g, _9 G, y& E# m4 P
  61. 无序就scard,有序就zcard,有z没有s; \) S, k1 E3 v8 f
  62. sInterStore7 l( [! ^, z! j# \* ?6 b
  63. 求交集并将交集保存到output的集合7 S/ `& Q( A9 z
  64. $redis->sInterStore('output', 'key1', 'key2', 'key3')
    6 A0 Z  f; M% Y
  65. 1 \5 ~2 t# w9 d, V: a
  66. Hash操作5 L( N4 R, O" N. U0 U+ z1 h5 S
  67. hSet6 ?6 M( b9 w: S7 r  G1 f
  68. $redis->hSet('h', 'key1', 'hello');
    / C: ?3 E9 q$ ?) i/ {3 m, L# i3 Y7 F- x
  69. 向名称为h的hash中添加元素key1—>hello* q4 w+ f7 f! |3 ]6 {
  70. + C- N, @5 o9 R( w
  71. hGet1 D1 g( y, y" y. G4 c! j3 x
  72. $redis->hGet('h', 'key1');
    ' ~: O6 P1 ^4 o2 o
  73. 返回名称为h的hash中key1对应的value(hello)
    $ X1 X, g+ e' \
  74. / B* |7 s0 X7 \1 \( I" Z
  75. hLen
    ) w# z5 {+ c% X8 C2 x" }
  76. $redis->hLen('h');0 w. [! I  I( x, ~8 Q2 t0 {( X
  77. 返回名称为h的hash中元素个数
    : d2 M* R. j5 ?; h

  78. * \" G1 t; x0 T; z$ I7 B
  79. hDel5 a& \* @' F, {/ n' ^9 d
  80. $redis->hDel('h', 'key1');
    : \8 O: X* I6 z3 N; f
  81. 删除名称为h的hash中键为key1的域7 |- y: h) k" e$ _% q5 _
  82. + H; B1 L% i3 v( @( }
  83. hKeys: ]( `* i! y: T; @
  84. $redis->hKeys('h');3 X9 L# J# g' H, @9 i
  85. 返回名称为key的hash中所有键' m9 U2 _8 h# }/ F. n7 |( H
  86. & k& `" U( U4 r) L1 N5 E
  87. hVals* {4 ]- g0 `" Z: N/ m( }
  88. $redis->hVals('h')
    + g+ _7 v/ U/ f; P7 C3 J2 w
  89. 返回名称为h的hash中所有键对应的value& ~7 F1 \# J6 K8 v8 T

  90. - F+ }& B6 E# O$ a
  91. hGetAll
    $ Z. s, q, [$ P0 Y  V
  92. $redis->hGetAll('h');2 w9 n& \  A9 n- d3 h& _: o$ T) {
  93. 返回名称为h的hash中所有的键(field)及其对应的value
    + U# T* o: C  Z7 I7 w) d! C, S
  94. ( [2 ]% q: Q; @! u8 \
  95. hExists
    ! g  S. j3 D/ V8 {
  96. $redis->hExists('h', 'a');$ k/ h8 Q. b4 A! ?0 ?, Z
  97. 名称为h的hash中是否存在键名字为a的域
    . E% B0 v3 C1 k! l$ F$ o1 g
  98. % O& Z6 t5 |( y& p
  99. hIncrBy! b- u2 ^+ B1 p& Z7 H0 @# k
  100. $redis->hIncrBy('h', 'x', 2);7 ?3 z5 A; I/ c  N) i
  101. 将名称为h的hash中x的value增加2
    6 C" L- P* Z; [( }6 |

  102. ) a2 G, Y( l8 u2 L& b
  103. hMset; S5 G7 W: [4 V3 {; j3 i+ m$ J$ G" v
  104. $redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));* @/ j+ u& u- r) y$ s! k4 i8 z
  105. 向名称为key的hash中批量添加元素
    0 F6 R+ J0 p! N, s* ~9 i' U

  106. . M# o6 Q/ v: Z% e  I4 Z2 Y' U2 i
  107. hMGet
    , y5 t, B' x7 K. {  a- f- @' @
  108. $redis->hmGet('h', array('field1', 'field2'));3 Y: @1 q6 w) h/ ]+ g$ \
  109. 返回名称为h的hash中field1,field2对应的value3 D4 p3 l# Q5 u6 z5 ?

  110. 6 u0 T( Y4 o/ U- f# V' @1 ]
  111. redis 操作相关
    1 S/ ]- Z* H% L9 f; R) k
  112. flushDB4 ?( r8 Y3 f; n3 R2 F% B5 Z1 J
  113. 清空当前数据库7 V; _, U% T2 b! ?: N& E- w6 C

  114. % C- D% q. v" g% s; U
  115. flushAll% k6 @: o' Q4 w/ P
  116. 清空所有数据库
    1 @2 s3 X% L7 G
  117. & E: |/ [% @, H/ z! J7 w
  118. randomKey3 l9 W* a# }& [) ^- T
  119. 随机返回key空间的一个key
    . B; q( K6 y3 o1 E* t
  120. $key = $redis->randomKey();
    - k# q3 ?- [8 r6 a: d! V

  121. " y6 ]/ t% @  K3 U( r
  122. select9 B4 t/ z4 w' M/ m, p
  123. 选择一个数据库" P4 u- z: H5 |3 j6 i( C. d& }
  124. move
    5 O- T+ `9 v0 U% A# M* H
  125. 转移一个key到另外一个数据库$ \5 V% i' b# u
  126. $redis->select(0); // switch to DB 0
    6 }  R. Z1 \5 w5 M6 }+ y
  127. $redis->set('x', '42'); // write 42 to x
    / i; Z% N% ]8 f5 `+ k. v
  128. $redis->move('x', 1); // move to DB 1
    " Q; J" f# X8 ~7 F* F5 Z: Z4 O' O
  129. $redis->select(1); // switch to DB 1; ]& T. L; d# R6 {3 B$ B
  130. $redis->get('x'); // will return 428 E  i6 j) n; X$ n; L6 p' O
  131. % d' w  P/ x7 m; b/ l
  132. rename, renameKey$ M  w+ f. U9 X1 w& H9 k2 l4 F+ O5 |
  133. 给key重命名
    ) i2 f' c) r, y
  134. $redis->set('x', '42');2 t4 P! a$ ]5 D3 K# E6 b
  135. $redis->rename('x', 'y');
    % _# D9 b. Z; c8 y! _
  136. $redis->get('y'); // → 42) S& y9 z" K$ Y, i" V1 Q
  137. $redis->get('x'); // → `FALSE`- f- U. y3 n* o1 C7 ]3 f
  138. 1 S' y1 W+ N9 [. x$ e
  139. renameNx  y, }. r) g9 X. K$ v2 t
  140. 与remane类似,但是,如果重新命名的名字已经存在,不会替换成功* h7 _9 h+ e1 ^% f/ s; d2 Y. ]- d
  141. % Y8 E, I" F$ E* V2 [3 E- r
  142. setTimeout, expire8 s. r3 z5 T  b4 D" i
  143. 设定一个key的活动时间(s)1 o  g5 g' s. N0 p: _: F2 B1 J
  144. $redis->setTimeout('x', 3);
    8 T* U9 k4 l( a* h# E0 C
  145. / i, e# x# o( j: h8 Q
  146. expireAt7 {& S3 s) I: v: t* {; Q
  147. key存活到一个unix时间戳时间# `* o5 {  ?! f2 X/ A8 ^# \
  148. $redis->expireAt('x', time() + 3);+ x0 Y6 Q' P8 n
  149. 8 N/ u+ v$ I: e
  150. keys, getKeys
    ) v) A  ~; q2 t* E# }  {2 h- K
  151. 返回满足给定pattern的所有key# x  p  J" {  T6 v3 O
  152. $keyWithUserPrefix = $redis->keys('user*');  m0 r. u! }) _% M! W% K

  153. ! m( [( s/ t0 \/ ~+ o
  154. dbSize
    . v$ h6 p4 @& R* C- m
  155. 查看现在数据库有多少key
    , G* {: D' ~2 a$ w) N$ C. t  }
  156. $count = $redis->dbSize();2 j) R5 ?4 J9 z& {3 S
  157. ' u. W  H( |5 M7 B
  158. auth4 p  i2 H9 I+ z  r, D
  159. 密码认证$ @% Z4 V* u! @, _- t, L2 n
  160. $redis->auth('foobared');& m: x6 Q# L" K& P

  161. & R$ r# m. A: C
  162. bgrewriteaof. F/ f; C$ _& u# o6 v
  163. 使用aof来进行数据库持久化
    ) t! m: y' s: c8 W! e9 f& \" e
  164. $redis->bgrewriteaof();
    - R8 v4 S8 N, E- O, a, F

  165. 7 \% T! m( E7 H, O+ F6 r# N
  166. slaveof
    6 w2 g" L- _1 U2 S0 l$ Q
  167. 选择从服务器
    $ }2 \% j; r: _0 J1 R
  168. $redis->slaveof('10.0.1.7', 6379);4 z3 b/ l& y% P* K  L( n8 a! S
  169. * ?& `2 N3 q/ F8 n  Q) g3 ^
  170. save3 v& e# S6 K+ D' w& j" Q
  171. 将数据同步保存到磁盘
      W5 y1 d3 k! l$ ^5 _1 M

  172. + L7 ?( n. I. X6 i  w; _
  173. bgsave
    8 I( a  |: L) n7 _# p3 S
  174. 将数据异步保存到磁盘* r/ V$ T5 A3 s+ m: O! B% `3 j
  175. ( f2 z+ [! a+ L' ^
  176. lastSave
    7 v5 j% H1 ~5 n  ?5 o1 E
  177. 返回上次成功将数据保存到磁盘的Unix时戳6 O$ F* Y. d+ Q
  178.   `9 i! L) M1 |+ U
  179. info
    6 @# d# ^& ^4 w% I6 ?+ {
  180. 返回redis的版本信息等详情
    $ K% Y( ~( B: _7 p4 x) E) @3 v

  181. " u+ s2 G$ Z" \* }; o
  182. Redis::__construct构造函数
    ; a4 Z" }0 p" G" ~
  183. $redis = new Redis();; I* x* L5 ]/ |8 J1 `& m6 I

  184. 5 N/ K! J: M3 W7 P/ D. {
  185. connect, open 链接redis服务
    . \  b7 q! ^( F+ Q5 {& z+ k! ?+ ?9 Y
  186. 参数# E+ t4 u3 @0 L3 G3 I" B9 ?
  187. host: string,服务地址7 `5 v8 y8 n6 z! n- m. P8 S: e
  188. port: int,端口号) ^% L* I( a5 C7 _# `! G
  189. timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)7 I: W! z+ P! q3 }" x$ u5 ~2 k
  190. 注: 在redis.conf中也有时间,默认为300
    ) T8 N* K# Q+ p$ A; h7 M) v! s

  191. 7 ?! Z0 R+ D2 A' R( P8 \
  192. pconnect, popen 不会主动关闭的链接
    4 }$ Z8 x# s" S
  193. 参考上面$ S0 ^" [0 V# j* o3 H4 b
  194. 0 B0 x! k; j* W% G5 g' x2 M
  195. setOption 设置redis模式
    # R) Y% h5 |* j# y$ A( {( i) a

  196. & j: c, ^+ G: d
  197. getOption 查看redis设置的模式7 z! n$ a! [  H! ~! }0 v

  198.   ~6 H/ w+ F3 Q
  199. ping 查看连接状态6 h) F3 h3 s( c9 V7 X
  200. : U/ p8 k8 E6 Z: B9 N! u- c0 v& `( m
  201. get 得到某个key的值(string值)
    & f, O* W2 t% U
  202. 如果该key不存在,return false
    ) k9 `2 y, `* I+ f( n/ Y
  203. 8 d8 q$ z# @( o" R4 N: d
  204. set 写入key 和 value(string值)2 O4 L+ R* c7 F, m7 M
  205. 如果写入成功,return ture) }& Q* {* w& f+ @, W

  206. / R2 E$ K/ x# U2 @; m( s. \, r
  207. setex 带生存时间的写入值# p, o. h# A7 H0 N' @
  208. $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.4 k' ?& _2 _# N, ?2 z2 F

  209. 1 k/ j" Q* u) U0 T5 t* D
  210. setnx 判断是否重复的,写入值
    ( V2 Y- @  I0 a  |
  211. $redis->setnx('key', 'value');+ A* j, u( }' C, S* r
  212. $redis->setnx('key', 'value');' Y1 f/ L( s) V- d9 W9 V) M! h# q

  213. : c9 }8 B" z$ i6 j
  214. delete  删除指定key的值8 @" w5 a% t; ]6 S3 S3 t( k7 u
  215. 返回已经删除key的个数(长整数)! Y' s4 A' c1 F: ~* b' |
  216. $redis->delete('key1', 'key2');
    1 L1 R- z# O8 E) q
  217. $redis->delete(array('key3', 'key4', 'key5'));) i, g9 f8 H/ \, B+ i
  218. . P* q1 g, \* k+ ^4 @5 z
  219. ttl4 n( {$ x. _# z1 q0 ?+ T+ `8 G
  220. 得到一个key的生存时间
    % o" N: C4 @1 n& u+ i* m1 f
  221. $ \" e1 w  m& C) V7 w4 m; ~
  222. persist* b& ]7 e" o7 g- R
  223. 移除生存时间到期的key
    . t  `+ u3 i- \
  224. 如果key到期 true 如果不到期 false
    # V  Q) z: ^' y4 e$ ]* B' ~8 G2 b

  225. 8 y2 o/ q5 N: r4 S* X1 S+ @
  226. mset (redis版本1.1以上才可以用)
    ; H! [+ E4 i8 ^4 Q- Q( P5 |/ f
  227. 同时给多个key赋值0 P! m# O" F9 ?8 y7 s; E5 \
  228. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
    6 F! N) E3 H" [

  229. 4 y2 f2 e. i( F1 L/ G# ~1 k
  230. % W7 v& R4 t8 M1 ]. A5 r, B
  231. ) C4 J- i" t/ c; Q$ x& @6 l
  232. multi, exec, discard8 V. x- b% W3 z
  233. 进入或者退出事务模式
    , |0 M' I$ B1 q! K1 x9 ]! O
  234. 参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
    . b. t, T' K& t7 e9 R5 o
  235. Redis::MULTI:将多个操作当成一个事务执行$ G- _8 v9 _$ X* O$ M8 g6 w- m
  236. Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证
    ( e- j. W+ G1 B2 [: k9 N
  237. discard:删除一个事务- Z. N5 @+ n% M& K
  238. 返回值
    - S  o+ J2 k/ Q. F; s
  239. multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。: p$ c0 _" o" H7 ?1 z% b; E* ]9 o: u
  240. 3 M) N' z5 j! V6 l1 M; f
  241. watch, unwatch (代码测试后,不能达到所说的效果)1 B" a) s* R! {/ v# _* ~
  242. 监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)1 y* Y0 B* @) s% D7 G9 ?# |
  243. unwatch  取消被这个程序监测的所有key
    6 D5 I( K1 _- y! j
  244. 参数,一对key的列表8 V! W7 R3 G/ K
  245. $redis->watch('x');
    5 c- d( ]+ s  {
  246. & g. ?. m/ Y. ~! v4 @; y
  247. $ret = $redis->multi() ->incr('x') ->exec();9 W3 b  ]% G7 U( r  J8 n
  248. . l/ d# V0 E8 a) ?7 [+ Y/ p7 {( E

  249. 1 B/ ~4 s0 n& n- t2 U. @
  250. subscribe *- j! Q' A1 f. h% g: q# X" l  @
  251. 方法回调。注意,该方法可能在未来里发生改变  x  T, C4 D& e: Y* C

  252. 5 u- G! c" x, I8 T7 u' N
  253. publish *
    2 N9 j5 c% U$ [$ e' @- b" e
  254. 发表内容到某一个通道。注意,该方法可能在未来里发生改变6 u7 L9 C2 G7 i) s! U4 X4 q
  255. ! x4 n4 C& J# e# d1 `- s
  256. exists# N5 j" y" `( F
  257. 判断key是否存在。存在 true 不在 false  b- D* {: N' z1 O* E
  258. 9 M/ _* M8 V: j  T8 n# G
  259. incr, incrBy2 W# G' {5 H$ s6 c2 `; E, S
  260. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值; {( {- R" _' B3 C; d" c+ O
  261. $redis->incr('key1');" L: i; A1 I8 v+ k- l% a
  262. $redis->incrBy('key1', 10);
    6 K/ C) k. O+ o# {* a/ o

  263. 8 A' x8 i! L/ l
  264. decr, decrBy
    , C/ O" }8 J9 z+ e: j7 B% x
  265. 做减法,使用方法同incr% h/ v; z, W- J( j! `9 p
  266. * ~( v% N( o& L) x4 F# K
  267. getMultiple
    & `" X& \. o) V2 v
  268. 传参
    - c$ `! u/ a/ S  u
  269. 由key组成的数组! _6 h% X* H9 [+ y8 Z! i/ U
  270. 返回参数
    9 U( [7 u8 I7 U+ k4 H3 Y
  271. 如果key存在返回value,不存在返回false  P% l. s, z+ r/ {& Z
  272. $redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));
    6 F" r5 k- E( p0 d( x% R# v
  273. $redis->lRem('key1', 'A', 2);
    - W9 d8 @. g& ^4 I
  274. $redis->lRange('key1', 0, -1);; a0 p5 @; y8 u, g/ F3 F: Z
  275. # [! ?# H( Y  L. A3 z% o! _( ]* J
  276. list相关操作
    ! A, r& _& s, }9 d3 B
  277. lPush
    ; @% J# ]2 H0 V/ ~* U! n1 a* G
  278. $redis->lPush(key, value);% Q. W/ H9 f$ Z2 o6 T1 H
  279. 在名称为key的list左边(头)添加一个值为value的 元素4 U7 @" N6 b6 E1 c
  280. 7 C: Q, U5 ^2 s5 c) [
  281. rPush7 ^7 A: H# p1 g7 m4 t
  282. $redis->rPush(key, value);. `( b* w& `( m9 t/ o% l( o! ^& O
  283. 在名称为key的list右边(尾)添加一个值为value的 元素
    2 ]! Q/ ^% t' Y+ a& `7 r. s$ v* H9 l
  284. 9 N# z* V6 T8 V- Y5 w0 K
  285. lPushx/rPushx5 G6 H- T- p* u* s4 p2 P# k) X
  286. $redis->lPushx(key, value);
    $ Z8 a+ K$ w4 |  d( K* P' S
  287. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加
    ; P6 u0 z7 {( ~; D9 L

  288. ' A& q& E% N+ x  m
  289. lPop/rPop
    ( |4 q. K% P( n6 e! o" s
  290. $redis->lPop('key');
    ; R- p) O  Z9 d" E
  291. 输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素. `1 @$ m* K. d, L9 E9 y+ q8 V+ V

  292. 8 b  w! ~1 h5 W* O2 @
  293. blPop/brPop
    - d8 r& M. c) n
  294. $redis->blPop('key1', 'key2', 10);
    $ z* ?; h, R; O3 H) U
  295. lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作$ K8 P* D9 e: C1 Z/ n
  296. ! B1 q/ }1 t8 k4 ^" c' ?
  297. lSize/ {8 T6 E! S. a4 t: Y  S2 k
  298. $redis->lSize('key');
    8 ]5 Q2 N, m5 |& J3 [0 g) w: a0 u1 d
  299. 返回名称为key的list有多少个元素
    , T% `9 j2 j9 q. B, v# y1 h* o

  300. 9 t8 _6 F( A$ J) t% q) n6 k+ j* H" q
  301. lIndex, lGet
    * d+ v2 {4 N, s9 d, o( b0 |
  302. $redis->lGet('key', 0);& S) U& I; r8 W: O) x
  303. 返回名称为key的list中index位置的元素
    6 ]: k7 n6 O. Y1 d

  304. 7 s4 d8 D# ~3 m9 ~
  305. lSet) g& T6 A) }% G7 b. _0 R- _/ H
  306. $redis->lSet('key', 0, 'X');! o7 ]. c' x/ k' D6 s
  307. 给名称为key的list中index位置的元素赋值为value
    , m, M& C# L9 a' n; E! X8 e# X
  308. 8 n8 q+ e% @* I4 }! q' I  w
  309. lRange, lGetRange4 c/ Y' D. ~) n* ^8 o7 U
  310. $redis->lRange('key1', 0, -1);$ {7 u# }) i& {
  311. 返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)
    , o0 G+ e: ^5 q* m6 _
  312. ' D/ A! `6 F, z4 n8 I& ]+ Z1 e7 }
  313. lTrim, listTrim+ E- o6 Z) B. |
  314. $redis->lTrim('key', start, end);$ t0 ^8 c. i, A, g! `8 q% V0 _* G
  315. 截取名称为key的list,保留start至end之间的元素
      Y4 ?: W) l* \/ a9 x5 o3 @2 m7 S

  316.   e5 {* _# a$ C/ u& s/ n3 C# T
  317. lRem, lRemove: n8 U8 a$ L- V8 N2 x! c7 W
  318. $redis->lRem('key', 'A', 2);/ N, P. E* a$ G& [
  319. 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素* o9 g' A2 L8 [2 X$ ?4 u
  320. " Z  S" \- h. U/ g$ ~
  321. lInsert1 u  i# ^9 _7 x0 n
  322. 在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -1
      T3 C  M% I! a; k& i9 ]" 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');
    ) H( P* s* b/ f; Q+ }: v* s7 R& j5 y
  324. $redis->lRange('key1', 0, -1);
    " r+ C: Y' I5 Z" r
  325. $redis->lInsert('key1', Redis::AFTER, 'C', 'Y');
    1 x# L$ W8 V9 o
  326. $redis->lRange('key1', 0, -1);
    * {% Q5 `% E) ?
  327. $redis->lInsert('key1', Redis::AFTER, 'W', 'value');2 d% D, ]6 U( s
  328. . J7 A& `- g4 u' j, _2 I
  329. rpoplpush
    : w  f9 H5 H0 l: J3 d
  330. 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
    & Z7 q) }) J- x% r! L3 ?
  331. $redis->delete('x', 'y');
    ' ^+ N# U  t( z; \
  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'));5 J/ k5 r, [# W* w# @
  333. var_dump($redis->lRange('x', 0, -1));: j7 p) y# W) R( f
  334. var_dump($redis->lRange('y', 0, -1)); - h* c5 e9 O5 U% F( f3 @& ]4 n2 U

  335. 2 E; [$ k/ G- g3 L  v4 }
  336. string(3) "abc"
    % E% O6 A, f% W$ [
  337. array(1) { [0]=> string(3) "def" }
    1 O$ N! w( W% Y6 d$ Q% ^9 a
  338. array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }' ~5 e' J& i$ V! ?- p& g0 b4 p( S. m

  339. & F+ g  z- W, s7 A! T8 i  D
  340. SET操作相关( z+ S8 ?& L& Y, D
  341. sAdd
    , G8 {! H0 M( m4 ~1 ]* o3 i- K3 r5 s9 }
  342. 向名称为key的set中添加元素value,如果value存在,不写入,return false
      k; w, g$ I2 ]1 m. R* j+ ]
  343. $redis->sAdd(key , value);
    ' G) ^  h1 v1 `8 b' M, }

  344. 6 k* ~1 d- c0 g) N
  345. sRem, sRemove
    5 ~* P3 d3 E5 ^, P% k
  346. 删除名称为key的set中的元素value
    8 M/ T; z  Q0 K2 K+ C
  347. $redis->sAdd('key1' , 'set1');4 R$ K6 ]  t) A1 C7 r) D$ Y
  348. $redis->sAdd('key1' , 'set2');
    + P" J5 w# P& e' s' w
  349. $redis->sAdd('key1' , 'set3');
    5 i/ A" j& k, Y% |+ J3 W/ K
  350. $redis->sRem('key1', 'set2');
    ' p' M) G3 E- I3 B; w, q

  351. ' Z1 m9 M7 ]% ~' B. L4 ?
  352. sMove; E% L$ z  q1 r! _: B5 s( b
  353. 将value元素从名称为srckey的集合移到名称为dstkey的集合
    5 p" Z1 d- P9 }; r+ j. |6 H* f
  354. $redis->sMove(seckey, dstkey, value);1 F) H, G- q: s/ t, t( y
  355. 8 }9 y; ]2 \) N) H$ J7 ~$ @
  356. sIsMember, sContains
    - w5 s; W8 t+ W7 c( B, n5 x
  357. 名称为key的集合中查找是否有value元素,有ture 没有 false
    + ?' _/ J% ?) W1 j
  358. $redis->sIsMember(key, value);6 T1 s$ i1 D' V+ G* h
  359. 1 H5 k. p( }# X: b7 v
  360. sCard, sSize$ c+ p+ i. Y# K, |: a
  361. 返回名称为key的set的元素个数
    * o* N6 |- f/ r6 u

  362. * ~& ~4 j  J; w2 O4 X. _2 _6 m
  363. sPop. B) Q( z8 |3 N" l0 ~  J
  364. 随机返回并删除名称为key的set中一个元素9 j) F$ i: X# Q' k& i
  365.   F* a8 A/ j' ]
  366. sRandMember
    5 \4 b' O' n) W0 ~# y3 P8 ?3 r
  367. 随机返回名称为key的set中一个元素,不删除7 f, L6 Q$ Q# O
  368. 9 F- p; G" j5 u! r$ h0 J& `# v' H" ^
  369. sInter2 D+ Y/ O! [1 E! |% ~2 ~# i( r
  370. 求交集
    ' C+ j/ o1 Y& c& F

  371. - |* t& ~/ Z3 K9 L9 R; A+ y
  372. sInterStore
    * O1 j2 V0 N. y) A3 F
  373. 求交集并将交集保存到output的集合+ q  m. ?7 I- z0 V" o
  374. $redis->sInterStore('output', 'key1', 'key2', 'key3')  U6 k$ ]0 Z2 z( a: M0 L

  375. ( b3 Q: Y, ~. ^4 ^
  376. sUnion
    : }' B) G" @. k5 m' `  ~
  377. 求并集
    8 n& ~; S3 s8 @  r# J; D0 I
  378. $redis->sUnion('s0', 's1', 's2');6 h5 ~" T: G% J5 v: W
  379. s0,s1,s2 同时求并集
    : Z" O/ _4 l7 q' ]7 @2 c# d1 e
  380. : [* L! S$ H: d( |+ x
  381. sUnionStore
    7 @5 ]% P. ~9 C6 F( Y
  382. 求并集并将并集保存到output的集合
    / v3 _2 F( J" U; N; r, g
  383. $redis->sUnionStore('output', 'key1', 'key2', 'key3');
    - g  [' d! f0 d0 f( Z
  384. & N! u) [/ V! `4 Z
  385. sDiff
    . G2 s9 m' y2 X. ^( S* t8 o  k
  386. 求差集; \8 W! M- ^& s! t) `
  387. ' ~1 b4 u6 x! ~* _
  388. sDiffStore% ?7 o! E& @( K. e0 ^/ I2 d+ ~
  389. 求差集并将差集保存到output的集合8 K" J7 |1 b6 p3 z+ i% B3 n* W- D  |

  390. ' k' w1 }1 K) l3 c
  391. sMembers, sGetMembers1 u  T* e7 N% [$ F) C' j
  392. 返回名称为key的set的所有元素) ]$ {, q" I4 L7 {, @9 L

  393. 4 A) |3 q/ j: F6 d7 W, ]
  394. sort- C4 K9 ~( l& Q7 F" ?7 E! c) M5 m
  395. 排序,分页等/ n: l9 N' `, o
  396. 参数: L- I; b6 M: O( J) Z
  397. 'by' => 'some_pattern_*',4 C2 g; \$ P6 y1 }- C( S
  398. 'limit' => array(0, 1),
    ( i, W# W  N& }
  399. 'get' => 'some_other_pattern_*' or an array of patterns,$ i* {  _, X2 ~( b/ b) h$ t
  400. 'sort' => 'asc' or 'desc',
    " Y: d8 I  U/ J' z, e# H6 H3 T+ t# r  H9 N
  401. 'alpha' => TRUE,
    ; c* b. E' h/ G6 Q
  402. 'store' => 'external-key'4 O% B8 T% y4 _; w. d+ i4 J3 ~' J
  403. 例子
    ' w) r% _  }9 p4 E2 F) T6 [1 s
  404. $redis->delete('s'); $redis->sadd('s', 5); $redis->sadd('s', 4); $redis->sadd('s', 2); $redis->sadd('s', 1); $redis->sadd('s', 3);
      y; q* J5 V$ n
  405. var_dump($redis->sort('s')); // 1,2,3,4,5
    7 X- d0 ]* V3 d# e; p
  406. var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1: N0 ~3 W* P$ \! G4 w
  407. var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5
    ; W; ~7 R! _$ t, F, Q5 B: q

  408. ) ?. h( b! U! m$ ]) J4 [
  409. string命令
    9 l1 Y/ t; M6 G$ p' d
  410. getSet
    " j  u6 s5 }, P7 Z! Z; f/ X9 x! s; h
  411. 返回原来key中的值,并将value写入key
    - v! M/ W2 U* v- g& }8 H( O
  412. $redis->set('x', '42');
    & I, r! E6 Q0 c/ R. v' ^
  413. $exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'$ l9 y: _) K8 N! n
  414. $newValue = $redis->get('x')' // return 'lol'- J% u0 I. O  h  H' }
  415.   p% H! ]$ w( Y! \
  416. append
    " ^8 Q3 ?2 {! b- d
  417. string,名称为key的string的值在后面加上value
    8 K4 c9 u* `& S( \0 a
  418. $redis->set('key', 'value1');7 d1 {( p% s! m/ H' N
  419. $redis->append('key', 'value2');+ |7 J' J9 n; K; e' B' t
  420. $redis->get('key');: W: z/ s2 h& W% J( V8 _
  421. 6 x, o: E% B7 n& G
  422. getRange (方法不存在)
    $ g. c0 t) W( q) K6 Y, b% x
  423. 返回名称为key的string中start至end之间的字符
    * d/ ?. m  E6 D' {$ h
  424. $redis->set('key', 'string value');
    9 R* s3 u$ Y# q) H
  425. $redis->getRange('key', 0, 5);
    ; ^, Q% L- X7 V: l! y' A4 c  ]
  426. $redis->getRange('key', -5, -1);* Y3 i$ C: a5 M

  427. ; T4 [7 ?) W9 ^/ @2 W* X3 A
  428. setRange (方法不存在)3 J3 A4 d+ x  Y' Z( t; l
  429. 改变key的string中start至end之间的字符为value( X! g! p9 f5 P! B4 u: n
  430. $redis->set('key', 'Hello world');3 H) O3 l/ t6 z
  431. $redis->setRange('key', 6, "redis");0 P: h& r9 t: {) Q
  432. $redis->get('key');7 S, }: ~  r1 O* ?8 Q+ e& ]

  433. 1 x  z" r+ a  o
  434. strlen3 F: D) H) e) D5 s1 H1 P
  435. 得到key的string的长度* s; T6 \( U7 `7 w& P6 B
  436. $redis->strlen('key');$ u8 T) P5 m9 t6 E( K9 [

  437. - j+ q, A: ^* f! F  p
  438. getBit/setBit
    0 o6 s8 i" F3 A& ~# D, \
  439. 返回2进制信息
    ) x0 D5 M" Y; K

  440. 8 r* s  u1 Q" x+ y( x
  441. zset(sorted set)操作相关
    * E4 W( e" r5 T) y5 I
  442. zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。" }/ A3 E9 N' i- |: h" z
  443. $redis->zAdd('key', 1, 'val1');: J: t7 B" C2 }0 s' Z+ R- R
  444. $redis->zAdd('key', 0, 'val0');" ?% @' q- T( y
  445. $redis->zAdd('key', 5, 'val5');. R" z; \. b# j& i/ C0 b
  446. $redis->zRange('key', 0, -1); // array(val0, val1, val5)) L! U! }+ y" Z
  447. 8 @2 [% d# ]( B2 O$ g! U+ p
  448. zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    8 U$ f" f" r% u9 N& B# N% b& ?
  449. $redis->zAdd('key1', 0, 'val0');
    7 W  S# o  Z- W7 S
  450. $redis->zAdd('key1', 2, 'val2');2 Y* o. y( f& o1 a- K
  451. $redis->zAdd('key1', 10, 'val10');0 S3 j3 g) ~* z: L+ l, V1 ?
  452. $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);
    & r3 S8 D  o6 @% b

  453. # I: H8 {/ X2 d
  454. zDelete, zRem0 t8 o; g5 D4 y0 J
  455. zRem(key, member) :删除名称为key的zset中的元素member9 l1 K8 G0 `+ c0 B* G1 |  m
  456. $redis->zAdd('key', 0, 'val0');0 G4 j( u. C( g' i
  457. $redis->zAdd('key', 2, 'val2');
    ! h; H+ n7 N! t6 H: K- ]3 |$ q# G
  458. $redis->zAdd('key', 10, 'val10');2 b# m7 j: B! E0 a' F) P
  459. $redis->zDelete('key', 'val2');! {0 m! h& C2 @7 g$ q
  460. $redis->zRange('key', 0, -1);
    % ?5 k' b: W# H, o

  461. 9 u4 T3 `1 }2 `' T
  462. zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出* Q6 N+ q0 Z5 q  ^/ i- B5 u. Q
  463. $redis->zAdd('key', 0, 'val0');6 @$ `' j1 w! [1 M7 `
  464. $redis->zAdd('key', 2, 'val2');
    6 a7 ^. p' k; S6 z
  465. $redis->zAdd('key', 10, 'val10');/ z2 k% r! G& U
  466. $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);& O% n7 c) L3 B
  467. 7 _/ L6 w, g+ I  m' O" B4 a, f+ G
  468. zRangeByScore, zRevRangeByScore
    ) a! ~6 b- d9 \% {  x
  469. $redis->zRangeByScore(key, star, end, array(withscores, limit ));8 @' }4 ~6 K  w. M6 _* ~) L
  470. 返回名称为key的zset中score >= star且score <= end的所有元素
    3 H# x" x; C5 S3 O. v* _
  471. # R8 x; T8 n( ~+ I" N5 u
  472. zCount9 c. k, l& n  o. x
  473. $redis->zCount(key, star, end);# }5 M* v# t; ^" n
  474. 返回名称为key的zset中score >= star且score <= end的所有元素的个数
    & Z. S) }, l( Z

  475. # b$ K$ H. p5 J8 ]' l3 V- B+ p, F9 ]
  476. zRemRangeByScore, zDeleteRangeByScore! Y3 J& T: O+ J% x" P' Y
  477. $redis->zRemRangeByScore('key', star, end);
    - j) {( h$ K  o( e  ?
  478. 删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数
    5 S: y4 U. T" ^" |. Q8 v
  479. : F3 Y9 J. k1 [1 e9 G
  480. zSize, zCard
    1 V* [4 n& G! T9 n+ X& ~( a
  481. 返回名称为key的zset的所有元素的个数
    5 _3 _  P% g1 N4 _
  482. : d, W; p+ L/ M; G5 `1 _8 F
  483. zScore
    , [& I. q' D% q- u. ?
  484. $redis->zScore(key, val2);
    & p" c: `0 z& E: i: f$ q
  485. 返回名称为key的zset中元素val2的score
    - F6 W$ J9 ?, k, u7 k$ l' r; Y

  486. 0 O) \  |  O& H) }, W- k
  487. zRank, zRevRank: ~2 l+ J! V! u
  488. $redis->zRevRank(key, val);5 ]# i& Y& m2 D0 `( z
  489. 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序6 D4 |7 b6 |  z& O# j2 b! u
  490. 8 M3 `" G! C( Y: f" z8 Q
  491. zIncrBy  v/ `$ E0 r& O% C
  492. $redis->zIncrBy('key', increment, 'member');4 T0 x5 c/ S" V
  493. 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment
    ! a3 s9 D, u7 c; E# o: }
  494. : a1 O7 O( ^9 |
  495. zUnion/zInter
    7 h+ R9 W1 d0 G" a! s! E7 m" B4 G0 z
  496. 参数
    " p. o& n$ }. c3 g2 b0 h+ g6 v
  497. keyOutput
    . K" g4 ^5 C0 l" ~7 h2 Y) N
  498. arrayZSetKeys
    + n( ]% v. X) d( [
  499. arrayWeights
    : N$ }5 O8 ~& k- U* t2 p1 x
  500. aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.% K' i0 ]" B% C& ?4 {0 C$ K
  501. 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。
    + V) ]- e" H$ V: m% i
复制代码
! v) C: E( y; @4 v% C
( p/ t( `7 C# i9 D
; {5 ?8 R  O6 u- @, c1 Q
4 y! R6 b  A( z; C% W6 S0 ]7 O( q3 D0 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
沙发
 楼主| 发表于 2019-11-26 17:06:33 | 只看该作者
  1. $redis = new Redis();
    : s9 Q; P- U" e2 V% |
  2. //连接redis服务器
    : v$ G7 k4 _! T. Y: w" k, z
  3. $redis->connect('127.0.0.1', '6379');
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

GMT+8, 2024-5-17 16:31 , Processed in 0.157234 second(s), 19 queries .

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