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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-11-26 16:58:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. **php.ini文件添加:extension=php_redis.dll  重启php, phpinfo可以看到redis则证明安装成功**
复制代码
php连接redis测试
  1. <?php0 t* B/ {0 A) E! @
  2. $redis = new Redis();  - {! z4 V" ~, H# [# I" D1 g
  3. $redis->connect('127.0.0.1', 6379);//serverip port  t: {2 X4 i- \, Z
  4. $redis->auth('mypassword');//my redis password
    0 @& X- [5 [; }+ Z7 b
  5. $redis ->set( "test" , "Hello World");  0 [0 h* m- n1 g& M8 b, p* z0 S
  6. echo $redis ->get( "test");
    . O, Z0 h! \- T; V4 F6 R
复制代码
php操作redis函数封装
  1. /**
    0 p+ L/ u! g9 E' m+ y, ~
  2. * 如果不传入$host和$port默认读取Laravel环境变量的参数+ s3 ~1 ~, _. X: r, n5 E. A3 Y
  3. * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi$ r; e6 e$ m# @
  4. */
    / t& X! t6 v6 u" k: {' e
  5. function RedisSet($key,$value,$expire=0,$host='',$port=''){4 F; K; U, ~: Q  C( O% X" ]
  6.     if(!$key||!$value) return false;
    1 T6 {( W; ^% J+ w+ T3 R- B: ^, z
  7.     $host = $host?$host:getenv('REDIS_HOST');
    - ?+ l5 ]! a$ i! p! a1 U
  8.     $port = $port?$port:getenv('REDIS_PORT');
    + u2 c4 [" E3 N/ }. |8 z' w# h
  9.     $redis = new Redis();
    ( a, k. y2 ]+ [. c2 X
  10.     $redis->connect($host, $port);2 @, t! X0 q$ Z4 l' R6 t
  11.     $value = is_array($value)?json_encode($value):$value;: v2 ~" ?( S$ I
  12.     return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);
    . {* J# f: v+ K
  13. }
    1 {& F% }* b/ c! G% v
  14. /**$ w6 o0 p1 f+ ?
  15. * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi
    % d+ T) |) r* _* _2 U
  16. */9 O8 b/ w& O9 m& E; i5 e
  17. function RedisGet($key,$host='',$port=''){
    - F* O6 r8 e+ t3 w% X& h' E. z! R, j
  18.     $redis = new Redis();& |! O. J0 ?1 D' ^  M; i, D$ `
  19.     $host = $host?$host:getenv('REDIS_HOST');& y+ j) ?1 e. [" t! U
  20.     $port = $port?$port:getenv('REDIS_PORT');9 }6 e' B6 ]9 H- k3 \" L3 Y& D
  21.     $redis->connect($host, $port);1 i% c5 s2 B- s( f5 x
  22.     $result = $redis->get(getenv('REDIS_PREFIX').$key);* U- G0 V0 @. C/ w% b2 M
  23.     return is_null(json_decode($result))?$result:json_decode($result,true);
    $ e( F' \! j4 Q+ _2 F7 ^+ ?" h( w4 J
  24. }& s5 B/ k) X% O& G
复制代码
php操作redis大全,基本上php操作redis常用的函数都在下面了
+ t( B* E0 h# L7 m9 B* v1 c
  1. setex 带生存时间的写入值
    # O0 T8 r3 }$ a5 a% S" u! O5 h
  2. $redis->setex('key', 3600, 'value');
    - E8 U3 K  M! W: m: Z. O; f
  3. setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回1
    , C$ `' x0 D( J' l
  4. $redis->setnx('key', 'value');
    8 V5 n. I  x1 m
  5. 返回已经删除key
    6 U  v3 F) u4 p) G
  6. $redis->delete('key1'); 成功返回1失败返回0
    / a5 D7 Z% [/ V$ y& v
  7. $redis->delete('key1','key2'); 删除两个键成功返回1失败返回0: X2 Y/ c/ k$ {1 r$ w
  8. 查询生存时间3 X- v/ \" r6 {/ O6 @% ?
  9. $redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒)
    4 k' l+ o" T# x5 g1 w3 U$ t. w
  10. 同时给多个key赋值,同时设置key0和key1" b8 |4 K. G5 F/ r$ @5 H; i! c
  11. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
    ! V' T  N" P* [% O$ t
  12. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
    + `# }# W! m( m% y
  13. $redis->incr('key1');$ @+ g7 D1 ~6 Z9 ~  W( S$ P" N! Y
  14. $redis->incrBy('key1', 10);
    " x; y) M- \" e! |
  15. 减法跟加法一样8 [; ]% W" u! G8 A5 C5 x% _
  16. $redis->decr("key1"); 减少1& F0 o2 d* a+ v" O1 \8 e4 q+ w. k
  17. $redis->decrBy("key1",5) 减少51 n+ V( p! c8 J; z$ T
  18. ) P+ W$ T" n9 h: t7 L4 w! s$ ^! m
  19. list相关操作,连表操作
    3 a$ `/ Q4 A( ]" r4 R0 ]
  20. lPush) U' m& y! C0 v1 @6 g" J" {; B3 y9 t
  21. $redis->lPush("list", "888");  g: @! D9 Y2 e; Q# h& S  y
  22. $id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数! u+ J* [& D3 u$ s2 w* o; r  h
  23. $redi->lrange('list',0,-1); 返回全部数据,数组形式9 J/ j  k# h- ?( P
  24. $redis->lrange('list',0.2); 返回连表0-2坐标的三个元素
    + {  E; C% h, ~8 a
  25. lPushx/rPushx/ a/ U: V3 W1 Z3 J' h' d% u( X
  26. $redis->lPushx(key, value);
    ( M2 {. J* K8 h5 ?/ i
  27. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加0 j% h/ A. V% s) y! l! k1 @+ r
  28. 8 L1 U" o/ d! Q( I, t, U, W2 ^
  29. $redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key
    5 t6 R, @, z, X' a! X$ J
  30. $redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key6 S4 N; G3 A; B$ {+ H6 i4 J
  31. $redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1, S2 _2 S! r) b  Y  r9 W( S
  32. 集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序
    5 Y6 s" P8 x8 t) R: ]
  33. sadd s1 zhangsan
    $ U1 {# ?0 K* P1 A+ Q; s' t$ D9 B
  34. sadd s1 lisi
    # R! [7 D1 ]9 {5 e4 u8 N1 u- N
  35. sadd s1 wangwu
    : B2 W) k" E/ @+ ]$ C0 ~: M
  36. sadd t1 yangxingyi
    9 W5 Q% ^2 k0 N' W2 B$ e
  37. sadd t1 lilei% i2 i6 N' A2 }8 ?. x
  38. sadd t1 zhangsan
      T6 p4 A- ?! w* y: T8 Q  k
  39. smembers s1 s1的所有集合内容& O+ G. s% M; R( u6 u
  40. sdiff s1 t1 s1有的,t1没有的,差集
    6 T# H! L" i, J) L, s# B
  41. $redis->sinter('s1','t1');返回s1和t1两个集合都有的,数组形式
    7 J1 ~" J' \4 G1 O( b3 @6 y1 M. r" X
  42. scard s1 返回s1集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的, Z$ F9 }% u6 E+ E' {
  43. spop抽奖场景,返回集合里面随机的数8 r$ v  c+ D4 a4 E/ _5 o
  44. spop s1  默认返回1个,返回后就删除这个数,中奖了就不能再中了
    ! i# |) Z+ I. f( Z2 t, ~% J
  45. $i = $redis->spop('s1');var_dump($i); 返回一个数,返回后删除这个数( E3 L8 R9 W; F% A7 g
  46. $i = $redis->spop('s1',2);var_dump($i);不能返回两个的,提示错误的
    6 T- g9 o  s' Y( L  A2 p2 N! C
  47. 随机返回集合里面的一个元素,但不删除,重复中奖
    # V, t, W2 Q: I' d8 n) b6 A: M5 N3 N
  48. $i = $redis->srandmember('s1');echo $i;$ ?+ t7 y, l) U0 j
  49. sismember s1 zhangsan 查询张三在不在集合里面,在1,不在false
    " H: c9 z- |. p+ J6 U% Y& [' M- i8 ]
  50. $i = $redis->sismember('s1','zhangsan2');echo $i;在1,不在false7 p( L0 _2 B; O; N$ H: Y3 V1 ?

  51. 8 j/ m; G- V$ ^% @
  52. zadd key 2 value 有序集合% Y5 N) E* N4 _: s& y  B) S* K8 z
  53. zadd y1 1 zhangsan;
    1 N! _5 m, y# K
  54. zadd y1 3 lisi;9 f! H2 X0 m# N: z, M
  55. zadd y1 2 wangwu;
    # q1 H' G! @6 x7 o. s
  56. zrange y1 0 -1; 排序就是,根据插入的时候的排序从小到达zhangsan,wangwu,lisi. h' p& M4 S; Q! }0 _$ N+ @: y: ~
  57. $i = $redis->zrange('y1',0,-1);var_dump($i);: f! l. q; i+ v" s% j4 Q1 [
  58. 返回数组,键值不是插入时候给的键,是从0开始的新键) V3 z( x7 j* i+ q% x
  59. zrevrange y1 0 -1; 反转排序,插入的时候键值越高,排序越优先( N! [# i. o3 f) u% p/ X; M
  60. zcard y1 ;获取有序集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的
    " _8 |  M5 l* n( g# h4 a7 ]! {; D
  61. 无序就scard,有序就zcard,有z没有s- l3 W' k0 L2 _5 x& ?: Z
  62. sInterStore$ f* ]& o9 d2 |7 l5 h
  63. 求交集并将交集保存到output的集合
      W" M! Y9 b: R$ k3 O
  64. $redis->sInterStore('output', 'key1', 'key2', 'key3')( z$ l, o. ~& f: R

  65. # _3 L/ T# ~0 s; n4 V3 e% c2 {' X: S
  66. Hash操作( E" l: L. D' L2 A# X) E* S
  67. hSet
    2 b) r3 W: q( g
  68. $redis->hSet('h', 'key1', 'hello');# j! x: P  V, V# }2 y6 y) \
  69. 向名称为h的hash中添加元素key1—>hello1 Y3 g( C" c8 i$ g" R6 }
  70. ; O/ b2 A1 p$ Z% A- b# p, E3 r
  71. hGet
    ' p, S5 i! K, ^/ Z% N, M4 D3 z5 T
  72. $redis->hGet('h', 'key1');
    + m& P0 V. X5 ^, C5 _; Y, C
  73. 返回名称为h的hash中key1对应的value(hello)
      L+ o/ J- x# t: |7 x6 `' |

  74. ! z2 w$ H0 n. ~! M$ _* Q
  75. hLen
    1 B' v3 a( G, {! D+ J' ]
  76. $redis->hLen('h');+ e# z8 `- J  j0 P6 `3 l3 {/ ^
  77. 返回名称为h的hash中元素个数7 ^% L' b3 T) `- J* p
  78. % O4 m3 A- ]9 W8 C( X
  79. hDel+ E* m) b  e5 s4 t
  80. $redis->hDel('h', 'key1');1 f! F" q! V1 B0 Y7 L6 z1 S
  81. 删除名称为h的hash中键为key1的域$ b4 L7 J! G) |' Y& x0 }( k8 E
  82. / }, H; {4 m" D* v
  83. hKeys2 ^0 P1 G9 f; h+ y+ F! C. [3 o
  84. $redis->hKeys('h');" S* s; h# E! ^
  85. 返回名称为key的hash中所有键
    8 b- a; D# X' x2 a$ ~4 V" V

  86. # ~+ |( J* X: {& p- n- a& s* N6 T
  87. hVals" L! V" O  L4 j  m
  88. $redis->hVals('h'). [6 c; ]% R1 O+ b
  89. 返回名称为h的hash中所有键对应的value. d0 E5 v" K8 a1 ?

  90. ; A0 O7 @2 [( L
  91. hGetAll
    ' H, q4 R0 n! \& y$ n
  92. $redis->hGetAll('h');+ t( Z& M; q% M8 Q
  93. 返回名称为h的hash中所有的键(field)及其对应的value0 L4 Y* U5 ^- G7 f2 h/ ^" w# G

  94. ( |5 |# p' O& J) M! Y
  95. hExists! E7 ^& V! g6 N
  96. $redis->hExists('h', 'a');2 k! n% O5 h  L# c( Z
  97. 名称为h的hash中是否存在键名字为a的域
    1 M& O" h% V% F! x5 U2 A/ }+ |4 A# o3 V

  98. + \% r" f" ?  M8 Q
  99. hIncrBy; z- @7 Z; ~) w$ b
  100. $redis->hIncrBy('h', 'x', 2);3 }/ G" h$ m. S. e. a+ B6 `
  101. 将名称为h的hash中x的value增加2
    6 n9 Y& a0 d- ?1 I/ `" n* r+ L
  102. ; C9 @- [# f, W* F$ Y& ^5 g
  103. hMset* J# [$ k; M3 F+ l
  104. $redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));0 ?4 V+ d6 r% ?# S% }# Q9 ]
  105. 向名称为key的hash中批量添加元素
    ' q. p6 Q/ j4 P) ~- p# W7 E; C
  106. 6 ^4 }' i7 q  Y; l3 F
  107. hMGet' ~5 _# X$ ?2 W! |) o
  108. $redis->hmGet('h', array('field1', 'field2'));" i' ]8 v  A1 ]
  109. 返回名称为h的hash中field1,field2对应的value
    3 [: i* P$ Q1 T8 X9 Y. K! ^7 }

  110. 9 ?0 B6 E2 h1 P/ |6 v, x, y
  111. redis 操作相关
      D% z: ~& _/ ~) b( e- E
  112. flushDB; U9 z7 y# `/ [3 ^& @) _
  113. 清空当前数据库$ k( f* `" m& X" q, `
  114. . R& d3 s. \  h: R% ]
  115. flushAll
    3 f) _6 _" }8 a. l  ^0 F4 _2 F' U
  116. 清空所有数据库
    2 ?' l# j, A7 @+ n7 T

  117. , }4 G4 v  z3 d! ^/ b
  118. randomKey: p  \# ~6 `5 O4 G! n
  119. 随机返回key空间的一个key
    7 o( [* _8 N2 Q- I$ C
  120. $key = $redis->randomKey();
    & J" `, r  O2 B  K
  121. 5 N: X) _8 p; L6 |9 ^! T* n
  122. select
    2 `# p- v, t$ u
  123. 选择一个数据库6 l5 f8 m: w6 W, u! K; a, F& g
  124. move
    4 K7 i$ V) X+ ^4 j. j
  125. 转移一个key到另外一个数据库" a, g" l; ^3 J9 F- `! C9 m! V: B
  126. $redis->select(0); // switch to DB 0
    8 _8 q' g; d; ~- _! _% C6 `
  127. $redis->set('x', '42'); // write 42 to x
    $ @- h6 G& q6 L  ~7 n% l* j* }
  128. $redis->move('x', 1); // move to DB 1
    # Q5 {. c3 J  y9 `3 a. O
  129. $redis->select(1); // switch to DB 1
    ! k3 G0 A6 H3 p) w
  130. $redis->get('x'); // will return 426 R  U5 ?' Y7 q) i
  131. / \8 a+ M4 p, K8 E8 H
  132. rename, renameKey
    $ M+ W) x; j! A% C: a$ q" p, o
  133. 给key重命名
    0 h5 `  ^! G" F4 |
  134. $redis->set('x', '42');3 `4 ^6 P# T( s" u
  135. $redis->rename('x', 'y');
    , P, k1 H& }7 N
  136. $redis->get('y'); // → 42, X3 l8 K1 ^( A! G" B. J3 k9 U- \
  137. $redis->get('x'); // → `FALSE`" P- _& _& ^3 p- g7 V

  138. ( w+ t8 t' D! V1 \$ Z
  139. renameNx# `5 B$ w8 X5 X1 X: s) X* v
  140. 与remane类似,但是,如果重新命名的名字已经存在,不会替换成功7 w& C) F' ^( K! g0 i
  141. ! {( x: h4 T. r3 M' @# L+ A. l
  142. setTimeout, expire: b& O, k/ m' h, S+ `6 K6 K
  143. 设定一个key的活动时间(s)9 S- u  ]. \7 x7 z
  144. $redis->setTimeout('x', 3);
    % ~. B# K- k0 |9 m3 A

  145. ' a: V  r! H; u% s% A
  146. expireAt2 }' P# f6 `7 Y$ V2 L! z; h
  147. key存活到一个unix时间戳时间
    . P9 X0 o! k0 z' N8 O
  148. $redis->expireAt('x', time() + 3);
    " M/ ?) L. X2 k+ \4 l8 ]1 d/ n7 v
  149. ( m6 s, N! Y8 \" m: E& _* n
  150. keys, getKeys
    7 @8 t" u- `% K6 E! K* X% H
  151. 返回满足给定pattern的所有key+ d( f# N: b3 D* L3 a
  152. $keyWithUserPrefix = $redis->keys('user*');$ e( N/ a& Y$ A- |. s9 D
  153. 4 N! e1 h  E& B" w, a! U
  154. dbSize
    9 L! Y% P) a. h3 J
  155. 查看现在数据库有多少key
    8 q- V3 I5 [5 o
  156. $count = $redis->dbSize();
    ) M3 b9 w) ]$ Q* _( t) b+ G
  157. . P" b2 |- \' M4 S
  158. auth' D3 n8 B- ?6 d7 Q) l8 Z
  159. 密码认证& V8 S4 Q1 Z1 v' d
  160. $redis->auth('foobared');' d1 ?( A0 ]. ?$ p: B# B
  161. % `( M0 @+ d; J) }$ F4 W. p
  162. bgrewriteaof9 N0 N: e2 D1 q& B' U1 e" B
  163. 使用aof来进行数据库持久化2 d! ?6 t' c9 v( R, x3 t
  164. $redis->bgrewriteaof();
    - }: i1 I! Z  e

  165. * w0 I; x9 G8 A% w! w7 c
  166. slaveof* @8 ?8 k4 R" V5 y. d3 o8 S' B
  167. 选择从服务器( e; f8 r' ]3 k
  168. $redis->slaveof('10.0.1.7', 6379);& N  y8 N$ D4 P2 x3 N$ e

  169. % `. P$ Y. D5 H" s2 `
  170. save" R5 J! Q. }) E/ L
  171. 将数据同步保存到磁盘
    4 h+ [# u$ P" j% C

  172. - e( H  M5 Y- e' p3 U, K
  173. bgsave+ m3 l% P, ]( |1 Z- O9 t4 T5 E
  174. 将数据异步保存到磁盘
    ; j: y: `# M$ K) I& R1 m
  175. # ~2 ~$ Q* `0 a  i
  176. lastSave
    ( ^1 C3 U$ J! e, c8 g5 x/ R
  177. 返回上次成功将数据保存到磁盘的Unix时戳' g6 x7 |" z5 X. K, ^: S3 Q
  178. ' l1 e8 [# `* _
  179. info, K" z7 [2 }) h# l
  180. 返回redis的版本信息等详情
    ! h4 ]! k' u& }; |. O

  181. ' _1 V, D0 j7 N# Y0 E1 O
  182. Redis::__construct构造函数1 x7 t1 }/ Z: ?* o* L$ q* [
  183. $redis = new Redis();
    $ y8 |; E" p! a* a+ L
  184. : C+ V+ \5 \3 W3 h, [! |- W9 K
  185. connect, open 链接redis服务3 k3 E& d0 j5 ]0 r
  186. 参数; v- B- z! H, x  G5 A
  187. host: string,服务地址% U2 s( K* K$ x0 Y
  188. port: int,端口号
    ; u) y: c: b# j2 T0 g
  189. timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)# s: R4 y9 E! _: S/ p5 q% W
  190. 注: 在redis.conf中也有时间,默认为300
    ; _+ p5 L2 G  V, U6 @
  191. 6 [. a! a$ w3 \/ _/ D
  192. pconnect, popen 不会主动关闭的链接
    & E6 j* j& y4 m* b# G: M
  193. 参考上面
    9 r0 d- `( i6 w3 r2 ]

  194. 0 f$ q: E; a$ |0 {6 t
  195. setOption 设置redis模式' u; r% S/ V& L  _- ?4 |
  196. ( z% G5 h  @/ G9 L0 R1 Z) q
  197. getOption 查看redis设置的模式) i9 i& {' e. @/ t4 n3 ?) [+ |& o+ A

  198. - E5 [! m3 Q* c4 h) j$ `) u
  199. ping 查看连接状态
    $ F& x# r2 i3 p: [- i

  200. ; ^+ K0 s# ?6 }; v+ M& n
  201. get 得到某个key的值(string值)
    ' ~5 T+ i$ y0 v" W4 F" {
  202. 如果该key不存在,return false
    * n* X( `. m6 a+ o% K5 T4 T) T

  203. * f) V  B3 i6 f6 o. \) ~. ^. k6 w
  204. set 写入key 和 value(string值): {) k6 g4 F: q
  205. 如果写入成功,return ture9 f- v" X. [, u+ T$ `' W, X
  206. - H6 K6 v  H7 A
  207. setex 带生存时间的写入值
    7 T' N( U- ^+ _- q5 O
  208. $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.) l) `# O& q; k! D5 h) t. G; Q: L5 M

  209. ; H& i8 r+ ]" i+ }" g
  210. setnx 判断是否重复的,写入值
    & J/ M5 J. N1 Z7 d/ ?% D; Y
  211. $redis->setnx('key', 'value');3 G! R) a9 G# f* V  V: q
  212. $redis->setnx('key', 'value');
      J7 D7 B& L* k7 [
  213. ' f# l3 J% E& T: ~
  214. delete  删除指定key的值0 H& f* ~* I& L( k' M
  215. 返回已经删除key的个数(长整数)
    7 y7 @7 F1 _, |8 P  U- I
  216. $redis->delete('key1', 'key2');
      `) y, ]9 G% @& t1 o
  217. $redis->delete(array('key3', 'key4', 'key5'));
    ( {) A' H' `6 \0 T' o- v: |- `1 X5 Q1 O
  218. 1 l% T" i) p* w' n
  219. ttl
    0 G0 e/ O# n" a* Z4 Z: h# e. L2 v& I
  220. 得到一个key的生存时间
    2 t8 [5 F& I; g& [5 \

  221. $ O% |  e# U/ D  b6 h$ N
  222. persist
    ( m3 ~9 S7 w! t0 K) y# M
  223. 移除生存时间到期的key/ f+ m+ a- ~5 ?% I- t1 G
  224. 如果key到期 true 如果不到期 false, v; p6 x+ p9 x! v  Q3 K
  225. $ k& D6 d% {4 v
  226. mset (redis版本1.1以上才可以用)6 \& X; Z) w6 I& s5 p+ @
  227. 同时给多个key赋值
    & [7 B1 B* ~; p9 \) x
  228. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));  I9 ?# ?$ |5 I# X

  229. ; n2 V5 z4 C' w0 p0 n
  230. + J) g5 x6 Q, w! T

  231. # N! ^( \9 Z5 B, {+ q% @$ I
  232. multi, exec, discard
    ) q/ U! h! l+ z: s! |" X; z
  233. 进入或者退出事务模式
    8 D# O4 B# Y  ?3 h/ D1 c
  234. 参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI
    5 Y) `( O2 l4 u# q0 l
  235. Redis::MULTI:将多个操作当成一个事务执行
    , T9 |4 Z$ v" c
  236. Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证
    - L6 X0 H5 H/ \$ |0 b# H; @
  237. discard:删除一个事务/ D: h* v6 `9 `
  238. 返回值
    2 }  Z5 ]  ]9 ?0 n% Z  \$ u
  239. multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。
    - ^& A: j& L* E( o0 }, f

  240. $ R, ~3 i, I9 e- B3 ]
  241. watch, unwatch (代码测试后,不能达到所说的效果); h3 W/ w. Q: i/ t  _+ ^# E
  242. 监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)
    ! {/ j( P  e; Y/ ^
  243. unwatch  取消被这个程序监测的所有key* N: U4 y3 I! _- f: M! r/ {9 A8 g
  244. 参数,一对key的列表
    6 c0 `# Q% S+ [* A  f7 N4 ~
  245. $redis->watch('x');9 _' U& w5 ]$ f+ g$ R3 n6 w
  246. 5 D' R9 O* ?% k/ B5 n! y3 e! L
  247. $ret = $redis->multi() ->incr('x') ->exec();
    4 M( ]$ B$ Y+ i/ g

  248. 9 V7 E; k2 _$ }* m* f2 |' b* d
  249. ! k3 W: J$ Y9 c4 `4 O
  250. subscribe *. t( E- N- Z( F- s- j) R
  251. 方法回调。注意,该方法可能在未来里发生改变, {' x( R- b( H% T# I
  252. - d5 _7 ~3 w# W$ t* x
  253. publish *9 |7 X0 `$ K2 f' J# d/ H, W, r! F
  254. 发表内容到某一个通道。注意,该方法可能在未来里发生改变& T% A( v4 k& d: C
  255. % X& J* g: x, k) |9 ^5 f
  256. exists
    9 v; O: g/ F. c& u- S6 H2 `
  257. 判断key是否存在。存在 true 不在 false
    * g  f* H8 i# q% D% Y9 Q
  258. - h5 T# A" B0 Y8 c9 s- E
  259. incr, incrBy
    ' T! X6 R% U) w- }3 s9 ?
  260. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
    ; F# h' J: o& F+ h1 D' v7 |
  261. $redis->incr('key1');
    # Z7 P; X5 E; x- [, V
  262. $redis->incrBy('key1', 10);
    . m3 R& Z) C$ l0 f: C8 C, W
  263. $ \2 T' u' C6 q# e) E! H
  264. decr, decrBy, h' j, B; O6 v5 n
  265. 做减法,使用方法同incr4 J5 y% \; |9 h( x9 Z! I- S

  266. 1 D: {1 z$ \, c( _
  267. getMultiple4 U& I* u/ d6 j% k9 O7 E2 p
  268. 传参
    / A9 [# ^1 B. P5 L  ]
  269. 由key组成的数组
    & j" ]! r) u5 T
  270. 返回参数& e4 T9 U1 j' t) ^- i5 |. P2 \( E! E
  271. 如果key存在返回value,不存在返回false& _& Y" n( ~& m9 B4 q
  272. $redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));+ W2 @8 G3 j2 o+ t3 V
  273. $redis->lRem('key1', 'A', 2);7 k- a, S* d7 F$ c) g; |, A
  274. $redis->lRange('key1', 0, -1);; t$ ^2 l. s7 J4 H  Q% X, x
  275. . l, C; V  t* ]* D# J
  276. list相关操作
    7 i" x! y! \( c7 a
  277. lPush
    . ]& W& x5 I: I" |
  278. $redis->lPush(key, value);
    1 V& w6 G/ M- W) ~
  279. 在名称为key的list左边(头)添加一个值为value的 元素
    4 z9 e# u8 O. ^# I
  280. 5 Y( `' w- {% E" R# s! ]$ N& n1 ~
  281. rPush! z$ p6 C7 T. Y2 O
  282. $redis->rPush(key, value);
    $ @  ^9 [/ X- b9 k
  283. 在名称为key的list右边(尾)添加一个值为value的 元素
    1 V& Y: `% E0 z6 g
  284. " P; g, o/ M7 O4 C
  285. lPushx/rPushx
    + A! V' E; d9 d' r3 l* H
  286. $redis->lPushx(key, value);
    / A- h% t6 z2 c; \( J1 X+ r: O
  287. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加
    / s& ^7 k4 W! e1 W; c4 D3 l

  288. , n5 j) I2 v" @7 q, |/ j+ b, h$ W* Z
  289. lPop/rPop
    ( n) ~1 \7 _6 D8 V8 `2 t
  290. $redis->lPop('key');6 Q+ T5 H. m' `7 z
  291. 输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素
    ! f! |6 G  U% |6 Q) J* B7 V- r+ b
  292. ' Q7 B2 F& O* R+ w/ J7 ?
  293. blPop/brPop- s# B7 f5 r2 G. C. H
  294. $redis->blPop('key1', 'key2', 10);
    2 n: n  v$ v8 x" D
  295. lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作! w, R4 X* d3 _7 g& W2 U0 _4 G3 Q' w

  296. / c- h# e% O$ w& W
  297. lSize" w6 S( P/ o4 Z, z
  298. $redis->lSize('key');/ [7 n( g, l% {! Z/ t
  299. 返回名称为key的list有多少个元素8 p+ n6 [* D8 s5 b1 V
  300. 5 ^) ?' }: x/ V% a( R+ L; T
  301. lIndex, lGet4 }8 x% Y) u7 w" c& Q5 h+ j
  302. $redis->lGet('key', 0);
    4 w( E4 J  `9 K. ?1 Z
  303. 返回名称为key的list中index位置的元素
    # M) Q* W4 N; g0 {4 l. [
  304. 5 l' n7 H9 k  [; n8 k! s
  305. lSet: J/ _- e$ a1 _5 F4 U* e
  306. $redis->lSet('key', 0, 'X');. ]( o, D+ Y' C4 L/ ?' j# V  L* N$ j
  307. 给名称为key的list中index位置的元素赋值为value
    5 E# [# ~7 L2 E& }

  308. / v. I  Y2 G9 a6 L
  309. lRange, lGetRange
    6 d( b- Y% P0 q0 I' c6 {) O
  310. $redis->lRange('key1', 0, -1);. y/ r2 t, {4 ?8 c
  311. 返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)3 q5 @1 |& q' H$ d- n9 h
  312. ' z" G% T/ s# E$ D& p' v4 p
  313. lTrim, listTrim
    # k9 @" k  S0 w6 I1 |$ |) C
  314. $redis->lTrim('key', start, end);0 Q) }8 t1 ?0 G. R  D: H+ [" j+ _0 @
  315. 截取名称为key的list,保留start至end之间的元素
    . N/ H0 ^4 x9 P6 |2 s  Q

  316. . a; s3 y7 i. l3 a3 [
  317. lRem, lRemove& O7 O- Q: l! c
  318. $redis->lRem('key', 'A', 2);, E+ Q& o% U) I  R8 c) q- l
  319. 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素4 V) a6 N; i; {! h9 @0 ~

  320. + Z9 s) g8 {3 ?0 _
  321. lInsert+ E! E+ J7 S3 i% Q' [% Q* @
  322. 在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -1+ `2 q: w1 [$ k" Q/ H2 n) h: _
  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');  w6 \! R9 O7 x) U% e/ W8 w
  324. $redis->lRange('key1', 0, -1);6 E6 n! S/ S, W) F( r' n) H& H  X8 ^
  325. $redis->lInsert('key1', Redis::AFTER, 'C', 'Y');4 i& K$ u; g' U, i
  326. $redis->lRange('key1', 0, -1);# w9 J4 Y  J7 C, K! n1 t
  327. $redis->lInsert('key1', Redis::AFTER, 'W', 'value');
    ) ~' M4 X$ z3 {/ `
  328. 5 l1 ^2 P. G/ f" p
  329. rpoplpush* }: |8 ^+ f: t  J2 {' t
  330. 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部; G* C1 c' p* O
  331. $redis->delete('x', 'y');9 M- L5 c4 T" M0 O+ J, C+ I3 ?
  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'));
    ( s2 ~1 y7 J( o/ X. ]; F
  333. var_dump($redis->lRange('x', 0, -1));
    9 J+ ~4 N7 v3 r* R/ n
  334. var_dump($redis->lRange('y', 0, -1));
    3 _; ], b% G' _. E  L% q

  335. : q3 ?0 ~7 P3 o6 B1 S
  336. string(3) "abc"
    4 f5 L( r, r2 r0 {
  337. array(1) { [0]=> string(3) "def" }
    # n1 i7 ^3 x& L
  338. array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }- U8 d, F5 ~) E2 q2 p, ^

  339. % `! h; B2 {& x% ~* Q
  340. SET操作相关
    5 `0 P" o, X8 u" S" S
  341. sAdd" g$ W0 a$ |! t8 k' R
  342. 向名称为key的set中添加元素value,如果value存在,不写入,return false" }% m3 z+ I1 M( i9 K6 q
  343. $redis->sAdd(key , value);  Q8 T$ o7 Z! a3 G/ y

  344. # b) r  ^" h# E. s% k4 a
  345. sRem, sRemove
    0 Y- D; ^; U$ a6 M) ?9 l8 B. ^7 F
  346. 删除名称为key的set中的元素value
    1 Y2 S, W4 u& E
  347. $redis->sAdd('key1' , 'set1');
    " v, m% Q3 ^4 O  y
  348. $redis->sAdd('key1' , 'set2');2 W2 D4 k3 R1 t! W; R
  349. $redis->sAdd('key1' , 'set3');& R; S9 j- Y5 z. S& r  b& ]
  350. $redis->sRem('key1', 'set2');7 i# S- L7 e. `7 H, v
  351. $ O( g& u/ }0 c" G) U4 @
  352. sMove
    " E( K. e  _+ @' g- G
  353. 将value元素从名称为srckey的集合移到名称为dstkey的集合2 d0 H( s( L3 a% F
  354. $redis->sMove(seckey, dstkey, value);  O' ^9 }& n& t7 H. e$ ^6 C
  355. - ]! a& [& Y  o
  356. sIsMember, sContains! V/ O; P5 P" E1 j* N
  357. 名称为key的集合中查找是否有value元素,有ture 没有 false8 Y# ?3 {4 G7 I: Y+ [
  358. $redis->sIsMember(key, value);
    " Q/ F1 F% l, _" T2 N/ k
  359. $ p# d0 [& E$ }! D
  360. sCard, sSize3 L( S7 w6 R+ @+ ], b
  361. 返回名称为key的set的元素个数
    0 _) i! o4 n! ]
  362. 8 ?; _6 K9 U' p
  363. sPop
    + l, J0 |! V" u5 Z0 Z7 f$ C( b1 ^+ V: k( B
  364. 随机返回并删除名称为key的set中一个元素& ^$ @* {& x' o* ?

  365. ' a8 G2 z( V# p$ Q
  366. sRandMember
    , B; C# C) k% }
  367. 随机返回名称为key的set中一个元素,不删除- n3 F# g" ]4 C# N9 C5 E+ k' k

  368. : }- a1 ~: v- |$ \4 B; R
  369. sInter% |2 {  E9 \/ j- E$ t
  370. 求交集
    # S, h( c' f# c. z" f

  371. : g$ K. B0 k* O4 r, L: N' ^0 R
  372. sInterStore, y0 \- _3 a& A! _# X0 z
  373. 求交集并将交集保存到output的集合
    # {" H+ j* ^) Y( g2 W
  374. $redis->sInterStore('output', 'key1', 'key2', 'key3')& Q# B1 x) ~; R3 m. Q% j: O6 u- G
  375. 3 m& m2 \5 Q1 M6 a. P4 K( \
  376. sUnion3 ]0 J" S! y3 d  T5 G- C
  377. 求并集' U" K; t# [1 `$ O5 s& s
  378. $redis->sUnion('s0', 's1', 's2');9 c* U8 [8 l) H: b
  379. s0,s1,s2 同时求并集
    7 G% u2 ~# D' k9 K" u' l9 [* Q% q& b
  380. * G8 w+ f/ T  B0 s' Z
  381. sUnionStore
    - z8 s+ k4 s6 ]5 d4 u; z& ^
  382. 求并集并将并集保存到output的集合; R/ u0 K; l5 p& y6 l1 H
  383. $redis->sUnionStore('output', 'key1', 'key2', 'key3');  M( h% k7 \0 q; J$ ^9 S1 H
  384. & \0 U( v: l  v
  385. sDiff+ A9 j5 [  B0 J! l& e( z7 b
  386. 求差集, V: D! C' I( v
  387. 3 Y! I! ?# o' {: Q  C/ Z) S$ K% t
  388. sDiffStore
    ( D. u) E1 `4 q" S$ k
  389. 求差集并将差集保存到output的集合* T# U% }# R# H4 ~& Q9 i0 |& H/ S
  390. 4 E8 ]; I, o! j8 S8 L! R9 \4 b) E
  391. sMembers, sGetMembers
    0 o5 E, [9 V  K) o. [  O
  392. 返回名称为key的set的所有元素
    2 w- p+ R0 d- d9 p) t1 ]
  393. / H2 p2 C  a3 d1 O6 Y; L( a. `
  394. sort
    ) d2 |  ~% l" X5 C4 z6 H
  395. 排序,分页等3 l8 d9 \8 l+ Y0 N
  396. 参数) W2 K7 M0 B6 k- m
  397. 'by' => 'some_pattern_*',: M" J$ g" `6 d  O8 L& y/ r
  398. 'limit' => array(0, 1),( a0 j& t4 f0 K4 R: E* B
  399. 'get' => 'some_other_pattern_*' or an array of patterns,
    8 K4 T' B0 q7 X: J% _1 \+ \1 d
  400. 'sort' => 'asc' or 'desc',
    / {" A" R8 [1 O2 y3 l' S5 f( \
  401. 'alpha' => TRUE,- ?3 N4 l/ ^8 f9 B% K# d
  402. 'store' => 'external-key'
    ; h3 O! @# p! L% k2 F
  403. 例子/ j3 |( {5 E" C: i
  404. $redis->delete('s'); $redis->sadd('s', 5); $redis->sadd('s', 4); $redis->sadd('s', 2); $redis->sadd('s', 1); $redis->sadd('s', 3);
    1 F3 |1 V% Q# O1 [, Y+ u* M
  405. var_dump($redis->sort('s')); // 1,2,3,4,5
    * a5 v) M: L! z% _) m$ \
  406. var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
    5 d6 ?) a; q% Z2 C: L
  407. var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)59 M0 c0 ~  W- r1 K

  408. # h/ [- Y' S8 D0 l
  409. string命令
    . p3 [% f  C1 w: `4 v+ e
  410. getSet6 m& ^, a* L) b/ J6 h. i
  411. 返回原来key中的值,并将value写入key
    1 ?' K6 l" L0 l0 ?1 C
  412. $redis->set('x', '42');! l! N3 s2 O$ ^( t
  413. $exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'! A4 W' z9 M9 v) p
  414. $newValue = $redis->get('x')' // return 'lol'
    4 I. f3 m; D9 q1 e# |) P4 H( B+ ^7 h
  415. 0 p% d  {# U, l/ v/ v8 |2 o* E
  416. append
    # G4 h; |& t. G8 v
  417. string,名称为key的string的值在后面加上value: Y7 {" G0 E' P- |5 j# S7 z/ Y5 n. h
  418. $redis->set('key', 'value1');2 V1 v. D0 Y$ c# Y) Z) s* z: e
  419. $redis->append('key', 'value2');7 c5 n+ A9 X2 t! r4 t" H
  420. $redis->get('key');: f! e+ I. O0 w, S
  421. 2 s$ R0 h! ~3 s6 {( k5 g4 u  F
  422. getRange (方法不存在)
    " ]1 \. w7 Q$ _8 `
  423. 返回名称为key的string中start至end之间的字符& C  f- n: {0 h1 Q8 l+ B8 n8 y
  424. $redis->set('key', 'string value');6 I6 O' c0 S0 {8 o) A2 c
  425. $redis->getRange('key', 0, 5);
    ( V& d/ b1 o  }8 M3 R
  426. $redis->getRange('key', -5, -1);  `6 Y+ B& A, U

  427. : B; L$ S1 S: E9 K, ~! z# n) N
  428. setRange (方法不存在). k6 g2 C! p2 A& W: ?6 C/ J
  429. 改变key的string中start至end之间的字符为value* p$ A7 @: a% \4 Z( G, G+ H% B& i
  430. $redis->set('key', 'Hello world');
      `  u5 p; m; a" r$ N" t
  431. $redis->setRange('key', 6, "redis");6 n6 F" ]; y0 v( q3 [' s' a; u& V1 F
  432. $redis->get('key');
    0 i: z' s# n3 x* a' Y% x. c
  433. - {2 w) M1 _0 T9 T7 F
  434. strlen
    8 o2 h% h, ?( V" ]% e5 ?3 o
  435. 得到key的string的长度
    7 D: ]) H7 ]0 M! C0 m0 E
  436. $redis->strlen('key');
    7 {+ ~; R8 X0 B6 \; |1 o

  437. ( L1 E% o% {' g  H" t3 z# T
  438. getBit/setBit* n7 u  x0 O- N% ~3 r# R
  439. 返回2进制信息! X% m8 y' s. P" Z) j4 {/ ?0 x
  440. 8 A$ p& f& s  c
  441. zset(sorted set)操作相关& N0 |0 @+ ?/ B; e5 T
  442. zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。$ h, ?+ a6 G0 ]5 s' Y* q6 P! F
  443. $redis->zAdd('key', 1, 'val1');
    3 Q& J1 g% B8 F$ |$ J, s: h
  444. $redis->zAdd('key', 0, 'val0');
    6 x" _$ ]! M0 u7 @! m
  445. $redis->zAdd('key', 5, 'val5');+ R$ b9 u4 h; i
  446. $redis->zRange('key', 0, -1); // array(val0, val1, val5)
    + F) c! C8 j' `7 r, Q( q9 K; F

  447. " |' t/ d2 n' E
  448. zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    " Z4 `& }# C6 @/ R2 g
  449. $redis->zAdd('key1', 0, 'val0');
    1 U! U" I/ K! w9 v
  450. $redis->zAdd('key1', 2, 'val2');
    ' w2 k7 q; B! x; I) z
  451. $redis->zAdd('key1', 10, 'val10');
    * j  v/ Q5 b5 f+ V& a" t- r0 Q& H+ g
  452. $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);
    9 [# _' {( W" V: Q/ Y( c7 _0 y& y
  453. 7 O% k7 f5 q3 b- L% P! w9 m
  454. zDelete, zRem
    7 E# a0 v, O# i$ K
  455. zRem(key, member) :删除名称为key的zset中的元素member3 B2 Y6 H' D$ P4 M4 F0 ^
  456. $redis->zAdd('key', 0, 'val0');- w$ a% u+ x6 S
  457. $redis->zAdd('key', 2, 'val2');
    ' G# a! h- [+ a$ v
  458. $redis->zAdd('key', 10, 'val10');, K/ l! E/ e$ t- ?! X& R- N4 {4 b
  459. $redis->zDelete('key', 'val2');
    * v% w' J1 g& q
  460. $redis->zRange('key', 0, -1); $ z$ O; u- s& u  ]

  461. ; \* f: y3 i3 d
  462. zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出  _- j4 F+ i) n
  463. $redis->zAdd('key', 0, 'val0');
    + I- k# C; N+ h4 a+ s; {. k" S3 \. _% U
  464. $redis->zAdd('key', 2, 'val2');  C, D% E9 u' [( Y& I
  465. $redis->zAdd('key', 10, 'val10');- |3 }1 _  C- U! v' P7 z' x
  466. $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);# w) _" H9 z1 m; Y; x! ^! V0 b
  467. ( F- `( B: J* N' L, ^% {
  468. zRangeByScore, zRevRangeByScore
    + x$ m1 }" F% p
  469. $redis->zRangeByScore(key, star, end, array(withscores, limit ));# o: ?0 K0 d# G& S
  470. 返回名称为key的zset中score >= star且score <= end的所有元素
    4 Q7 G1 |; D, W( Q8 ]( s

  471. 2 C' F- a* G( H4 M  X+ s/ b* T# _
  472. zCount
    7 ~+ q7 Q" O2 W1 b4 Z; g8 Y: ]! j
  473. $redis->zCount(key, star, end);
    2 b) N8 N4 `3 c5 [
  474. 返回名称为key的zset中score >= star且score <= end的所有元素的个数
    $ R8 I" @7 r4 W9 O8 G# |0 s8 g
  475. 5 v+ D7 ~9 H. E- _  X4 O8 K& ~
  476. zRemRangeByScore, zDeleteRangeByScore
    7 a' Z3 R6 _, X8 N
  477. $redis->zRemRangeByScore('key', star, end);, h: `+ @& ~$ {- _8 {. Q
  478. 删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数" e. e/ T, K4 W4 V8 v

  479. 5 u7 j( P' e" E' U& d
  480. zSize, zCard! Y, d/ j  I6 }5 I2 y
  481. 返回名称为key的zset的所有元素的个数" D7 N9 e* x0 f: ^0 `$ H$ N
  482. % M4 R" j8 |; n
  483. zScore
    * {( _8 l4 J5 G. Y9 t1 X, @
  484. $redis->zScore(key, val2);! P' W' P  e- g' {1 A( e
  485. 返回名称为key的zset中元素val2的score
    ( I- i! Y5 i9 m9 h: G  d1 V: u
  486. , O$ x; d: x( g% ?8 C. B7 q# {
  487. zRank, zRevRank& m- d0 w6 x/ Z0 B, P7 V8 |+ Q+ e
  488. $redis->zRevRank(key, val);6 G2 T! j8 @4 x; J# M  Y
  489. 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序: |# ?2 |1 Q! p2 n8 V; l5 N
  490. & }. a2 d/ T5 {, ]
  491. zIncrBy* x, R5 T! M7 }  ~: m. R" @7 a
  492. $redis->zIncrBy('key', increment, 'member');
    7 l$ |) h" c# F
  493. 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment0 g/ {2 h3 Q) x. V4 M

  494. : m1 {7 T3 H) p9 Q
  495. zUnion/zInter; R1 U. i2 O# B% A
  496. 参数# C4 {% ?( n, o' r
  497. keyOutput
    * g; u) M4 M: b% T
  498. arrayZSetKeys6 b( m2 X2 e# Q0 |# o" p  L/ b8 d
  499. arrayWeights
    4 b5 z9 C( ?( M, l
  500. aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.
    4 z- H1 k& G$ p: z
  501. 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。7 h$ Y$ X0 u# o6 P6 {
复制代码

0 P6 Q5 h8 r* x& U' a( Z- e6 D: z- |& F
9 v+ V- c7 E/ @8 _. ]' A
1 H# A' b8 O; p3 k- N+ P9 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
沙发
 楼主| 发表于 2019-11-26 17:06:33 | 只看该作者
  1. $redis = new Redis();
    ) L1 [- _' |. ]  Q# w; B
  2. //连接redis服务器 6 G2 M7 T. `" r: Z; G% h3 V
  3. $redis->connect('127.0.0.1', '6379');
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

GMT+8, 2026-8-4 11:45 , Processed in 0.062492 second(s), 18 queries .

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