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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2019-11-26 16:58:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. **php.ini文件添加:extension=php_redis.dll  重启php, phpinfo可以看到redis则证明安装成功**
复制代码
php连接redis测试
  1. <?php
    ! T9 b. _0 s# u6 h( ]' V
  2. $redis = new Redis();  6 H) C! R, ?3 c1 X0 P8 L1 F+ x
  3. $redis->connect('127.0.0.1', 6379);//serverip port
    ! G1 X$ p$ i8 C  z
  4. $redis->auth('mypassword');//my redis password
    ( W3 R! l" m5 o( G8 y& z
  5. $redis ->set( "test" , "Hello World");  
    ( K% [: X; O: \* X
  6. echo $redis ->get( "test");
    ' z9 N/ q) O6 g% e2 X4 S# ]
复制代码
php操作redis函数封装
  1. /**
    / j! ~  N6 U4 b2 n7 z  ~
  2. * 如果不传入$host和$port默认读取Laravel环境变量的参数
    # O* V7 ?$ |6 L0 V. P0 X* E
  3. * redis Set/setex封装,可直接传入数组,可设置过期时间 written:yangxingyi$ {- ?' n& }+ l  W5 R1 W5 H% a
  4. */
    ( I7 t; z. e/ b& [
  5. function RedisSet($key,$value,$expire=0,$host='',$port=''){
    " A3 y$ l0 n0 t
  6.     if(!$key||!$value) return false;
    ! x; h4 J& u$ I6 g# k6 `
  7.     $host = $host?$host:getenv('REDIS_HOST');5 I! z8 _, A: n6 P
  8.     $port = $port?$port:getenv('REDIS_PORT');, B2 k; M. }4 _2 ^: }
  9.     $redis = new Redis();% M$ t- V% N3 J0 ^# r/ U7 l, e9 f
  10.     $redis->connect($host, $port);
    1 j7 V- x' W6 ^
  11.     $value = is_array($value)?json_encode($value):$value;% {$ R5 n+ h' A# ~) K
  12.     return $expire>0?$redis->setex(getenv('REDIS_PREFIX').$key, $expire,$value):$redis->set(getenv('REDIS_PREFIX').$key,$value);
    0 I9 U$ z' u' M9 s8 D. t0 C
  13. }5 d4 q$ e" o- B: `
  14. /**1 j# h5 n% T( B4 ?
  15. * redis get封装,如果传入的是数组,返回的也是数组,同理字符串 written:yangxingyi
    : ]/ X: u: l4 ?6 x: t3 ~
  16. */. e' `8 r2 c5 f8 y9 ]
  17. function RedisGet($key,$host='',$port=''){. C+ X9 @- R, p) j4 _% y
  18.     $redis = new Redis();5 S3 V1 E8 W4 l9 K; c% _! ?
  19.     $host = $host?$host:getenv('REDIS_HOST');
    , h  ]( N! E% \, j# ^# q- |
  20.     $port = $port?$port:getenv('REDIS_PORT');$ V0 a3 s/ V% E* v! r
  21.     $redis->connect($host, $port);
    3 |0 }2 o; A% V; X$ m) r1 {
  22.     $result = $redis->get(getenv('REDIS_PREFIX').$key);
    - b9 V& I2 \- k$ Y" @
  23.     return is_null(json_decode($result))?$result:json_decode($result,true);2 V/ j! O+ ?, @8 h) |
  24. }  ~& F+ ^& I6 M2 p- V  u! l& K6 l
复制代码
php操作redis大全,基本上php操作redis常用的函数都在下面了
9 g7 f$ s. q1 q7 t7 E6 }
  1. setex 带生存时间的写入值# s" E) t0 S2 M* a# C% q$ V5 n6 ]: v
  2. $redis->setex('key', 3600, 'value');
    ' |6 t" h% @0 A- Z
  3. setnx 判断是否重复的,写入值,如存在了不修改返回0,不存在就添加返回10 H; o' u# ^8 m" G" P% L# F; s
  4. $redis->setnx('key', 'value');
    6 J; P* J& j8 A# N" S
  5. 返回已经删除key
    ! I1 @# q8 n8 _. b2 a" j  A
  6. $redis->delete('key1'); 成功返回1失败返回0  |& W5 y% D) m0 \2 I
  7. $redis->delete('key1','key2'); 删除两个键成功返回1失败返回0
    % f* ~2 ?$ r) @& I: Y$ {
  8. 查询生存时间+ i! S' }# a* E' u+ A3 x" D
  9. $redis->ttl('key1'); 持久化的返回-1,有生存时间的返回时间(单位秒)! g4 J: o3 r8 s# w8 _
  10. 同时给多个key赋值,同时设置key0和key1
    2 q4 w$ n) U  H) o+ v
  11. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
    / a; H% B3 z/ ]
  12. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值9 m9 F. D( g2 F7 d- z
  13. $redis->incr('key1');
    2 S; J3 ~. T) b0 J# s
  14. $redis->incrBy('key1', 10);
    & @0 W% O; g! g8 R
  15. 减法跟加法一样7 D# I7 l1 K4 `
  16. $redis->decr("key1"); 减少1
    6 N4 W/ o' j+ L& l# z1 O
  17. $redis->decrBy("key1",5) 减少5( T3 J$ X3 Z, A

  18. 3 ?( _% k1 o7 o4 \  [* s: d: T
  19. list相关操作,连表操作
    2 ^" }4 m4 u$ Z1 B
  20. lPush
    # H: s$ y8 A. |6 u5 [" z3 F1 K1 N
  21. $redis->lPush("list", "888");
    $ ?8 L& ]: X+ h" X5 v3 w/ v
  22. $id = $redis->lpush('list','HHHHHHH');echo $id;返回链表的元素个数
    0 N1 q7 z6 w" k2 h( P
  23. $redi->lrange('list',0,-1); 返回全部数据,数组形式
    5 @! p1 C( ]- z/ ~$ N9 P* S9 x; k
  24. $redis->lrange('list',0.2); 返回连表0-2坐标的三个元素
    7 H) S9 I8 R% s4 n' H
  25. lPushx/rPushx4 }; d% z* H3 s  D
  26. $redis->lPushx(key, value);6 k8 i; n$ w( m, A: j* O7 [8 I# [' ^* J
  27. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加. E0 h1 [: ?. m  B  [( S
  28. 4 l4 ?- N7 Q! O' j8 @' q
  29. $redis->lpop('list');输出链表最左边的ksy的值,输出后删除掉这个key# B% d0 m6 T5 w. H) t. _  q; |
  30. $redis->rpop('list');输出链表最右边的ksy的值,输出后删除掉这个key
    % p3 i, ~8 @; q# _* b2 _- g+ q
  31. $redis->lset('list',7,"update"); 修改坐标为7的值,成功返回1
      U9 i! x3 s: s0 |/ R2 k& F
  32. 集合:sadd,sadd是无序的集合,每次插入集合的时候都可能会弄乱里面集合的排序  w7 ~) Y( v! a% d+ t
  33. sadd s1 zhangsan
    8 }1 [' S& Y/ [1 O. o( D+ `$ k
  34. sadd s1 lisi- J  @  [. N# t2 B) k3 C8 E. e
  35. sadd s1 wangwu' ]' x) [/ D7 P5 ?- ]
  36. sadd t1 yangxingyi" ?' z7 ~. l$ C! I5 W# W) c$ n
  37. sadd t1 lilei
    . H/ P- m5 O7 ^' ^" B+ i5 N
  38. sadd t1 zhangsan9 U5 W9 U, H( \+ V9 f+ K7 Y3 r
  39. smembers s1 s1的所有集合内容/ r; U; O  o( V  S% Z3 c: w( N  b
  40. sdiff s1 t1 s1有的,t1没有的,差集3 q0 }  s8 c2 q3 ~9 D
  41. $redis->sinter('s1','t1');返回s1和t1两个集合都有的,数组形式
    & R) t) N( a' s% I$ A0 [
  42. scard s1 返回s1集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的* [; H. b, z* e! d( y4 p
  43. spop抽奖场景,返回集合里面随机的数
    ' c1 G& o/ d  @. B
  44. spop s1  默认返回1个,返回后就删除这个数,中奖了就不能再中了
    1 ]2 n: B( S( x: N. d. ]$ u
  45. $i = $redis->spop('s1');var_dump($i); 返回一个数,返回后删除这个数- W% H6 h1 V9 x" z7 i+ g2 l
  46. $i = $redis->spop('s1',2);var_dump($i);不能返回两个的,提示错误的
      W! b' l* |' I* d4 g1 p1 d
  47. 随机返回集合里面的一个元素,但不删除,重复中奖: Z, _9 k6 k5 A3 @, |- ]: q" i: f$ n" \: G
  48. $i = $redis->srandmember('s1');echo $i;
    # J8 M9 V0 g6 i' |
  49. sismember s1 zhangsan 查询张三在不在集合里面,在1,不在false
    7 v7 x) z3 U/ B+ ~9 t
  50. $i = $redis->sismember('s1','zhangsan2');echo $i;在1,不在false( e0 m, ], ~: u6 w2 s5 G

  51. : r6 O1 G3 X: h
  52. zadd key 2 value 有序集合
    . Q5 M7 z$ E) q: g; i9 N  ]
  53. zadd y1 1 zhangsan;( L3 I7 ]  H2 I" X& T+ l$ X) i/ ~
  54. zadd y1 3 lisi;  y2 r' q' O, h
  55. zadd y1 2 wangwu;& W" S8 z2 C5 Y5 I0 P
  56. zrange y1 0 -1; 排序就是,根据插入的时候的排序从小到达zhangsan,wangwu,lisi+ m, v" w. D1 o0 d
  57. $i = $redis->zrange('y1',0,-1);var_dump($i);
    " }6 g! }1 c1 p+ D9 w. o% k
  58. 返回数组,键值不是插入时候给的键,是从0开始的新键
    % f5 v) P' q2 B4 Z6 O! S# o6 ?
  59. zrevrange y1 0 -1; 反转排序,插入的时候键值越高,排序越优先
    $ i1 l3 z- f7 N: i2 z2 B
  60. zcard y1 ;获取有序集合里面的个数,有多少个就返回多少个,没有从0开始的,坐标才从0开始的7 g$ R2 [. Z" S$ Z( E9 H1 ]
  61. 无序就scard,有序就zcard,有z没有s4 j: W& }% y, @4 t3 E2 ^* `+ L
  62. sInterStore
    ' H$ r4 {, }+ c1 r2 q7 u% S! T, t+ K
  63. 求交集并将交集保存到output的集合! e. w9 o8 S/ g6 }
  64. $redis->sInterStore('output', 'key1', 'key2', 'key3')' p0 w; N2 `$ ]' L. {* O( }

  65. ! H! s  s& v+ f) U( n! t( d4 s5 i6 ]
  66. Hash操作
    ' O8 B, n( c0 w: F
  67. hSet/ z/ R: R' f& A" e2 D. o
  68. $redis->hSet('h', 'key1', 'hello');
    1 n* W7 R% l( {
  69. 向名称为h的hash中添加元素key1—>hello9 ?" k& {  Q- }

  70. ( S: J6 E3 N9 V& U0 q  x3 C
  71. hGet
    " v) B$ C6 C: `; b/ d4 R/ i
  72. $redis->hGet('h', 'key1');
    ) A% c, c6 c; }: }9 z6 Y/ B
  73. 返回名称为h的hash中key1对应的value(hello); X6 e0 }4 s5 z! E8 r& Y

  74. 1 h7 W! w! Z  t' s# N. H
  75. hLen
    " |& {. A  N, I' y8 A" o% z# h
  76. $redis->hLen('h');
    ' P* ]! p  q4 q  ]' N* E" b% B9 L
  77. 返回名称为h的hash中元素个数* f2 w8 [* U5 B2 p- H
  78. & d1 K/ S/ r" v' C
  79. hDel9 @2 D; h' D! X, W; @
  80. $redis->hDel('h', 'key1');0 ~) c: o; j2 D$ b* c7 `9 `4 M# q
  81. 删除名称为h的hash中键为key1的域
    , r- E3 f& l6 `( W, D$ k

  82. # t& s4 W0 h3 T' M! X* M) J
  83. hKeys/ C5 V+ ^( Z4 l+ f+ i
  84. $redis->hKeys('h');0 B& Q' l* M9 d* T4 i  `
  85. 返回名称为key的hash中所有键# F- ]! N: G5 c8 D
  86.   L4 p8 E* _2 z* s8 |& l  ~+ D
  87. hVals
    9 R! n, K" ^4 S2 Y0 |. R
  88. $redis->hVals('h')
    2 i; M+ u' F$ D8 ^! ]1 x/ f
  89. 返回名称为h的hash中所有键对应的value
    4 F  v# }" p5 W

  90. # \2 c. n9 V2 G- ]( o7 e& N
  91. hGetAll
    $ Q8 {& g  [' [# b
  92. $redis->hGetAll('h');# n1 K* M' c8 C
  93. 返回名称为h的hash中所有的键(field)及其对应的value
    . M- e+ I; r/ L) k  t5 h

  94. 4 d2 t& R+ q5 M1 z
  95. hExists) e/ X* X+ g9 X* G
  96. $redis->hExists('h', 'a');
    " R+ F$ c  u3 q* N5 `
  97. 名称为h的hash中是否存在键名字为a的域$ Q1 u' {5 o4 w8 L5 [( j
  98. 2 }2 b& E' V% ~) `
  99. hIncrBy
    * x4 c% f2 a2 H
  100. $redis->hIncrBy('h', 'x', 2);/ w+ i4 F# t% A- ~1 W% x' {1 ^
  101. 将名称为h的hash中x的value增加2
    % C+ q2 ~$ o6 G9 M  W& T3 x

  102. . A' @% L0 e: H/ v+ l( i; N; o+ F
  103. hMset" \0 J1 R2 a2 ?
  104. $redis->hMset('user:1', array('name' => 'Joe', 'salary' => 2000));
    + t2 \0 d9 f; L! G; x
  105. 向名称为key的hash中批量添加元素3 z- U1 @( y/ P4 J
  106. 6 H3 [) g% l. u7 W! l, M5 V7 L
  107. hMGet- C8 {! u+ G1 U1 r# U
  108. $redis->hmGet('h', array('field1', 'field2'));
    / e. E0 B! f7 Y4 W: Q" ^. S
  109. 返回名称为h的hash中field1,field2对应的value& ]& {% z/ u- b; v) \2 [6 f3 d' }

  110. 4 }% M) x0 ?1 t- U6 p! u- m
  111. redis 操作相关5 i0 c/ \2 N5 J* d
  112. flushDB. q6 Y, O: U) z5 Q% K* W$ o+ k0 @
  113. 清空当前数据库2 t. |+ s+ G: o7 A! t- [

  114. ' K1 Z- C' X2 T9 c" n* E
  115. flushAll
    & B5 [7 F$ ~( `# P
  116. 清空所有数据库
    7 J2 N: q8 F/ h/ a9 z6 w( s, q

  117. : t* u. D* N& x! N  c- e3 A
  118. randomKey! K. j4 w7 q: {' o8 w- Z& ~
  119. 随机返回key空间的一个key
    3 Q* A' o: [5 o3 \$ ^/ I5 T
  120. $key = $redis->randomKey();
      k- ?' }* [7 J. Y/ o

  121. 3 G  o8 ]( J, m/ S0 g+ D
  122. select
    3 A8 L! a, ]' Z! v6 L' H( }. u
  123. 选择一个数据库% A7 t5 U9 ~, Z$ L
  124. move
    + }5 d1 m$ z5 D1 E5 U
  125. 转移一个key到另外一个数据库
    8 T+ X! x  [& f! s
  126. $redis->select(0); // switch to DB 0- P' T, G! w: F4 z! u7 t1 o5 b. w
  127. $redis->set('x', '42'); // write 42 to x
    9 C& R7 X& e3 ^
  128. $redis->move('x', 1); // move to DB 1; d% R4 X* u, ?2 e# l& G  P! @
  129. $redis->select(1); // switch to DB 1
    1 E) B: x: g# E8 J8 }, z3 w& e4 m: {& }
  130. $redis->get('x'); // will return 42
      F' p8 U* a' z5 w3 t, }8 B' v

  131.   l  M( ?2 A5 d: F
  132. rename, renameKey6 U7 k3 I/ a/ K, v% E0 E$ @! ?2 Z
  133. 给key重命名% H5 n7 y' Z% T) m2 x  |
  134. $redis->set('x', '42');' D2 ^1 \  r$ U' ]- H
  135. $redis->rename('x', 'y');; ~. @* u$ a; m1 C* C
  136. $redis->get('y'); // → 42
    * [8 z7 s) Y2 d+ u- Y
  137. $redis->get('x'); // → `FALSE`
    % y* m9 c/ S. P- ?9 V. e
  138. $ N& _* P+ k! n9 Z" s
  139. renameNx' X' x: F" P) A
  140. 与remane类似,但是,如果重新命名的名字已经存在,不会替换成功
      c1 ?% M8 g* x* H
  141. 9 d2 K1 h5 I, N! ]6 }7 h* A
  142. setTimeout, expire- E( S( c( w7 i8 O; g! k+ J( A
  143. 设定一个key的活动时间(s)3 Z  V; e4 C. X* l; M' @, r
  144. $redis->setTimeout('x', 3);6 l6 d' q" D; u+ j

  145. 9 p* n3 \5 R& ^+ q* |
  146. expireAt
    , v" @4 S$ h# k- F4 f; ?/ T3 i
  147. key存活到一个unix时间戳时间
    & w: J! `/ v' V
  148. $redis->expireAt('x', time() + 3);
    8 w0 |3 V) n2 _9 c( m

  149. 6 M3 I! N! ~1 b7 v/ b
  150. keys, getKeys
    & J# v. ]. l$ _' F1 H
  151. 返回满足给定pattern的所有key+ I+ I( _6 M- K5 r  T( S0 E" A8 a
  152. $keyWithUserPrefix = $redis->keys('user*');
    7 ?6 a" e) R1 T+ u9 W" D! h+ X

  153. ( k; I! }3 @  D- q# Q# c
  154. dbSize& o& W9 ^8 ]6 ]9 ]9 H; L7 e
  155. 查看现在数据库有多少key
    1 m( q& Y: H, J. e! x, j9 i
  156. $count = $redis->dbSize();1 Z# z; l! z+ a6 [+ h! m6 p

  157. 6 D; N2 ~  `; ^$ l% Y
  158. auth
    " H* Y! M8 E+ ^+ _
  159. 密码认证) a/ V: T7 P: n- s' _  e
  160. $redis->auth('foobared');! I6 [. w3 q3 {, b

  161. 8 j- a; K/ }, i" o) N+ v2 T6 |
  162. bgrewriteaof
    $ J9 e6 {1 ?' `8 S) h9 x
  163. 使用aof来进行数据库持久化5 b' D/ u2 S& n
  164. $redis->bgrewriteaof();
    " j; P3 q4 a+ \( ?

  165. & t9 }5 V. `, ~; E
  166. slaveof* v( W" n$ r6 k) z$ K( m
  167. 选择从服务器' ~: _, }: W* z0 g) o+ S5 }
  168. $redis->slaveof('10.0.1.7', 6379);5 S# R' z. Y8 s) Q" E# o/ ]
  169. ! y( g' e$ u, {- Z6 `
  170. save
    - S" G) C1 X% {
  171. 将数据同步保存到磁盘  J; I' j. N$ w
  172. 0 H7 r. V2 G% a4 E# O: p) V- @, M& T
  173. bgsave, F& M- l9 x/ R- e5 O
  174. 将数据异步保存到磁盘
    : a6 J. R4 s/ K/ y6 Y
  175. : ?- v! S& c/ U' L
  176. lastSave
    $ _3 D' J0 M& l. A1 J& ?* u& H7 V
  177. 返回上次成功将数据保存到磁盘的Unix时戳; M, X+ g% n6 o6 ~0 z8 V; Q' ?- x  C

  178. 4 q  ?/ W& w6 g/ D
  179. info
    * R! S: d* H' W: R5 c( H% C. \7 z
  180. 返回redis的版本信息等详情  @9 k3 Q# r* }, A+ }, y! g

  181. ( k: r2 z5 k7 g1 Z
  182. Redis::__construct构造函数
    & D) _2 z2 p/ p! Q6 D
  183. $redis = new Redis();
    0 o- \' [- T7 }3 Z6 Q1 J2 Z; y

  184. 9 ~1 h5 g" c" P7 `* G7 U& C, I
  185. connect, open 链接redis服务! Q$ j6 d4 N2 Z6 S3 |4 Z: H
  186. 参数/ [1 k1 g/ c1 E
  187. host: string,服务地址9 b+ i& y7 ^# `2 U% k
  188. port: int,端口号: n8 j" _* X3 p: i  o5 a6 j8 h- Q# i
  189. timeout: float,链接时长 (可选, 默认为 0 ,不限链接时间)
    # @' L6 v( t& _* Y4 K" O5 t
  190. 注: 在redis.conf中也有时间,默认为3004 F2 f% X, \% Y6 \
  191. , X  b  K) t6 U/ e
  192. pconnect, popen 不会主动关闭的链接
    - k, A9 E" Q7 J' h; g; Z9 t. E
  193. 参考上面9 }2 K+ f% v8 ~% W! k& H

  194. ! v7 |0 D" c# f5 _. H: a; t
  195. setOption 设置redis模式+ r% q  [/ G/ E8 U
  196. + n( l6 E% o! `; `8 J, J$ w
  197. getOption 查看redis设置的模式$ t" j* |' u) V% t( h; g
  198. 9 }: c9 F+ p/ p7 n$ u2 Y5 q
  199. ping 查看连接状态. w& R% A+ K" x* S* h( y/ O

  200.   Y6 R2 @/ B# z; _" z
  201. get 得到某个key的值(string值)
    7 j% s' ]4 I% B  w1 U
  202. 如果该key不存在,return false
    ! y- \+ q% m2 W- `! M: C2 k& W9 H
  203. ) h0 E% K* [! D7 U7 Y6 p7 R: l
  204. set 写入key 和 value(string值)
    ; K' U0 ^$ Z3 W. C/ G( }
  205. 如果写入成功,return ture. W; P( G, j9 n& N! y0 K6 [5 ?& l

  206. ) D7 g4 A) D' w
  207. setex 带生存时间的写入值6 e" o0 L4 q; U. I# G/ t
  208. $redis->setex('key', 3600, 'value'); // sets key → value, with 1h TTL.
    7 J$ {8 u& b/ b  g# |

  209. # O( W( S8 H9 r
  210. setnx 判断是否重复的,写入值
    : C" z4 c+ M4 E( u" g
  211. $redis->setnx('key', 'value');2 V/ V5 |5 r$ I) t+ @( o
  212. $redis->setnx('key', 'value');
    2 D' b; Y% y( y

  213. / Y; g) p! _. v, ^" X1 A4 P1 P
  214. delete  删除指定key的值1 @0 w$ U  p! ~' m
  215. 返回已经删除key的个数(长整数)5 G/ p. `, T. ^2 O! T$ z
  216. $redis->delete('key1', 'key2');# g5 i& ]* B  w9 d
  217. $redis->delete(array('key3', 'key4', 'key5'));6 Y* m- \$ M& m* D& U3 r

  218. 3 P5 j# u0 [7 x9 Q9 o1 [
  219. ttl8 o2 j, Z/ @7 r# T" x4 O
  220. 得到一个key的生存时间* v/ [1 s! {7 r, J$ m

  221.   z$ O- \) Q- t4 W
  222. persist: l3 U4 A! B( ~
  223. 移除生存时间到期的key! }+ w1 K5 O3 O* S( Y# q& h
  224. 如果key到期 true 如果不到期 false
    1 @. y0 M! i! k5 _; h0 [
  225. / u' T' t2 C" B5 v+ y
  226. mset (redis版本1.1以上才可以用)3 q6 |+ B/ `1 e, A
  227. 同时给多个key赋值
    : Z* q. ^! S- q* e$ s' q# }! m7 b
  228. $redis->mset(array('key0' => 'value0', 'key1' => 'value1'));
    " i6 w. D! f( o2 l7 S
  229. . M& p! f# h6 N, M) P+ l
  230. : E5 t$ ]( b" b4 K7 m4 A! x

  231. 5 B: ^2 `, l2 Z; {
  232. multi, exec, discard, Z, ~6 e# ~/ n, R
  233. 进入或者退出事务模式$ J# g2 X: t& F/ K
  234. 参数可选Redis::MULTI或Redis::PIPELINE. 默认是 Redis::MULTI1 ]: T- K/ R, S, d; I+ x$ r: y
  235. Redis::MULTI:将多个操作当成一个事务执行& M5 g; H' Q/ s! r  m  @* x
  236. Redis::PIPELINE:让(多条)执行命令简单的,更加快速的发送给服务器,但是没有任何原子性的保证) p: Y: t1 [4 L# K
  237. discard:删除一个事务2 x' S8 s& J4 y( U% O
  238. 返回值# c! Q- U4 T0 H+ q2 H/ S2 i# A9 N
  239. multi(),返回一个redis对象,并进入multi-mode模式,一旦进入multi-mode模式,以后调用的所有方法都会返回相同的对象,只到exec()方法被调用。
    2 |' w$ z; R6 b& V) O
  240. ( u% P9 r2 J/ D2 |
  241. watch, unwatch (代码测试后,不能达到所说的效果)/ E1 ?* I0 [$ o! N
  242. 监测一个key的值是否被其它的程序更改。如果这个key在watch 和 exec (方法)间被修改,这个 MULTI/EXEC 事务的执行将失败(return false)
    ' ?3 b7 A+ q5 _: ]
  243. unwatch  取消被这个程序监测的所有key
    , a, K/ y8 w) {5 X, l! E; j
  244. 参数,一对key的列表
    1 c9 I7 _. l8 R! w
  245. $redis->watch('x');
    9 }& K. W2 e/ y' t- F

  246. ! B( ]2 k4 N% [5 s5 B  X
  247. $ret = $redis->multi() ->incr('x') ->exec();
    # b! D( h9 s# R; q0 I0 {4 S5 _( [  n: e
  248. % w$ |* y- C# S
  249. - y# t, {! c9 L* b) Q3 [
  250. subscribe *
    9 Z) C% y% q# A0 j9 Z
  251. 方法回调。注意,该方法可能在未来里发生改变
    # y$ S' u+ F) M; _3 |" C% E
  252. 3 G9 N( t; j9 U
  253. publish *' k+ A9 U, }3 P) E
  254. 发表内容到某一个通道。注意,该方法可能在未来里发生改变! N. u7 d- A3 o+ w, x/ [! Z
  255. * c  J2 S8 D& ^8 M" n$ K
  256. exists
    0 _* b3 l: T; @( f4 x
  257. 判断key是否存在。存在 true 不在 false' ^- G  q% U2 W9 y- w$ J" q. G
  258. 2 V2 r8 P8 |0 \- C: K# e7 g- ]. b
  259. incr, incrBy
    7 V7 [/ V5 [3 U2 x! o. |
  260. key中的值进行自增1,如果填写了第二个参数,者自增第二个参数所填的值
    6 _3 x7 _! p) ~* X$ G- f
  261. $redis->incr('key1');
    % N& f! o% o9 @) ~# D
  262. $redis->incrBy('key1', 10);- u5 x1 R/ g7 a

  263. - Q; b$ M( ], b7 N5 W2 x
  264. decr, decrBy/ W& C0 n% O" W& E
  265. 做减法,使用方法同incr
    ( q; Q' M6 W$ ^: n2 W
  266. 3 ?. N" o, c! t/ s; p, z! u
  267. getMultiple
    3 N" M3 K. u7 y7 ?( Y8 ~
  268. 传参8 C6 Q7 ^. {- Z' j2 t0 j
  269. 由key组成的数组
    + V# C2 K; l7 `. u' K& g3 ~
  270. 返回参数
    0 _! B" ?- d* J' z% D: ?. h
  271. 如果key存在返回value,不存在返回false
    4 t  x# Y; ~; W' v; A) L
  272. $redis->set('key1', 'value1'); $redis->set('key2', 'value2'); $redis->set('key3', 'value3'); $redis->getMultiple(array('key1', 'key2', 'key3'));
    4 E# S9 N5 f) ^( ^0 M; W' N
  273. $redis->lRem('key1', 'A', 2);
    9 T& J8 j0 T& V! a0 ^5 y3 ]
  274. $redis->lRange('key1', 0, -1);, [2 r* \/ R0 @( O8 |0 }  {' w
  275. * k  {# b& J4 J6 t  \( K; i
  276. list相关操作
    - o! a5 O# k: W- K  V
  277. lPush
    " n0 c* T% n0 ?) h: J
  278. $redis->lPush(key, value);
    8 s9 j8 R3 F; S4 Z2 M2 }, B
  279. 在名称为key的list左边(头)添加一个值为value的 元素" i7 l1 k4 W; C
  280. ) X: k  |& @" J- _* Y
  281. rPush
    / v8 B% ~7 g8 e$ _. V/ Y$ F
  282. $redis->rPush(key, value);
    3 X0 r' H$ H& t9 i
  283. 在名称为key的list右边(尾)添加一个值为value的 元素4 X" t/ o2 M& i/ q

  284. / Q, g& F( |4 P
  285. lPushx/rPushx
    2 ]; E/ g5 g2 W+ E6 R
  286. $redis->lPushx(key, value);. \" [; |3 D% h% e$ X$ r' d
  287. 在名称为key的list左边(头)/右边(尾)添加一个值为value的元素,如果value已经存在,则不添加
    + b) F9 ~1 `9 M* o- `7 T) C! c, P
  288. 8 E# K+ b* `/ I1 P# _: U$ J. E% }
  289. lPop/rPop& [$ s$ B% M5 A$ l( J' V6 e! f0 x
  290. $redis->lPop('key');" V9 p0 s2 ?$ n5 {, H) V! I0 Y
  291. 输出名称为key的list左(头)起/右(尾)起的第一个元素,删除该元素
    $ {2 t& H1 B9 \6 @. q
  292. 1 v0 B! D2 l$ m/ d" T$ l3 J2 E
  293. blPop/brPop
    6 ^  S/ G6 Z) `  w" Z7 F. V
  294. $redis->blPop('key1', 'key2', 10);3 U6 O6 o1 q1 @- w8 g
  295. lpop命令的block版本。即当timeout为0时,若遇到名称为key i的list不存在或该list为空,则命令结束。如果timeout>0,则遇到上述情况时,等待timeout秒,如果问题没有解决,则对keyi+1开始的list执行pop操作2 b5 \/ L) _/ Q* L+ V& ~2 G) r

  296. / l+ y& x, ~' b
  297. lSize
    ; b% I+ D+ U: O4 j6 B/ Z4 p; |7 |
  298. $redis->lSize('key');# ^$ i. n9 y5 u/ `4 n
  299. 返回名称为key的list有多少个元素4 K/ [& L$ v( ]: P: |/ o. d$ |1 V3 F% q- J
  300. ! z3 z7 @+ h8 Z# b0 }: o
  301. lIndex, lGet; c& p4 d" x8 k+ l  o9 o
  302. $redis->lGet('key', 0);- X* n% \2 d2 U' l6 Z
  303. 返回名称为key的list中index位置的元素$ |! B& U9 e% X6 z& u7 U
  304. 7 h- e. M; Y; E) n1 W2 V7 K; g; F* Z
  305. lSet
    2 f- ^- }+ @4 d8 u3 P
  306. $redis->lSet('key', 0, 'X');
    4 k( Z" g4 g! g
  307. 给名称为key的list中index位置的元素赋值为value
    + t( \6 R6 L1 K

  308. ) n9 m, l8 H$ [2 Y6 U6 a" I
  309. lRange, lGetRange  K5 U9 ]2 S+ b0 x8 U
  310. $redis->lRange('key1', 0, -1);+ o3 d) h# t8 s3 z. ]9 b1 a
  311. 返回名称为key的list中start至end之间的元素(end为 -1 ,返回所有)
    6 T3 e3 x5 L) w7 q" a

  312. - s, h% W( ~8 z6 w
  313. lTrim, listTrim
    1 P* f( I1 a2 _/ b# p. I+ M. o
  314. $redis->lTrim('key', start, end);5 X5 f7 y( T3 |
  315. 截取名称为key的list,保留start至end之间的元素
    $ m3 S" D9 S, s; q
  316. + J; E( E' d8 m5 W) `/ z
  317. lRem, lRemove2 ]$ |0 \& M0 a" l6 y$ _' ]
  318. $redis->lRem('key', 'A', 2);' \" b8 @0 S7 h( x, [- L
  319. 删除count个名称为key的list中值为value的元素。count为0,删除所有值为value的元素,count>0从头至尾删除count个值为value的元素,count<0从尾到头删除|count|个值为value的元素+ E1 ^" Y+ E" c2 _" B' e8 e

  320. 0 U, ^" A! O/ ?2 T8 a% c, ?
  321. lInsert% _1 F/ |- e/ t" ]; g+ k3 K$ T
  322. 在名称为为key的list中,找到值为pivot 的value,并根据参数Redis::BEFORE | Redis::AFTER,来确定,newvalue 是放在 pivot 的前面,或者后面。如果key不存在,不会插入,如果 pivot不存在,return -13 f: A, J$ D3 N  X
  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');$ ]$ t/ d# K5 F* R
  324. $redis->lRange('key1', 0, -1);. H* g0 D# H6 C* b7 h
  325. $redis->lInsert('key1', Redis::AFTER, 'C', 'Y');) B+ ~% I9 e* _. l
  326. $redis->lRange('key1', 0, -1);& y$ S! A' A% W/ `) m
  327. $redis->lInsert('key1', Redis::AFTER, 'W', 'value');5 s! U' {6 m$ x9 H  s, t* ~

  328.   E5 Q7 A  k' O9 U; t+ b) w
  329. rpoplpush# Y% o5 T# L0 |1 V3 G* ~/ g0 ?
  330. 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部
    9 N3 m- M: J7 ~1 ?& `
  331. $redis->delete('x', 'y');* {% e' V1 N! `
  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'));+ }2 Y9 s7 Y& q- I: r- }
  333. var_dump($redis->lRange('x', 0, -1));0 l5 X- D6 z0 @0 ?) z3 s; v0 D3 d
  334. var_dump($redis->lRange('y', 0, -1)); * R5 ]6 N- S! n% H- I' B
  335. 5 s6 M! b: |# H5 p
  336. string(3) "abc" + Z" N9 s7 ~, E8 r9 }5 s
  337. array(1) { [0]=> string(3) "def" } , _# i0 m: G/ D& Q. F) N
  338. array(3) { [0]=> string(3) "abc" [1]=> string(3) "456" [2]=> string(3) "123" }
    0 E4 K/ i' z  i5 Q! e8 m
  339. / Z. K! `: t. ^3 n. r
  340. SET操作相关
    . `% n6 B' A8 I2 V! F) T$ N7 }
  341. sAdd3 R$ O: e1 h2 S7 u
  342. 向名称为key的set中添加元素value,如果value存在,不写入,return false5 T5 m: e; n- x6 z# W" H
  343. $redis->sAdd(key , value);" T1 n- `+ n! d$ S$ `9 b3 ~. {8 `

  344. * K* j; K5 s5 s6 ^
  345. sRem, sRemove) m0 H7 _4 z' ~0 m5 d: b
  346. 删除名称为key的set中的元素value; ~, ~" U( ~! S% [$ ^3 F
  347. $redis->sAdd('key1' , 'set1');
    % N) i7 A6 G& C* |
  348. $redis->sAdd('key1' , 'set2');
    & W, J% E8 v% I7 Z3 ?8 `1 k4 x
  349. $redis->sAdd('key1' , 'set3');6 C% X& n4 `9 z" u& K# \$ B' b
  350. $redis->sRem('key1', 'set2');  C' ^) r; [2 p* W9 w
  351. 0 L! `+ s  P+ [) x# ^" x
  352. sMove
      I1 w' P( e; ]9 T
  353. 将value元素从名称为srckey的集合移到名称为dstkey的集合, y5 T4 T' w3 h& D& B. \
  354. $redis->sMove(seckey, dstkey, value);0 x# ]7 ~, i. m' ^, B% ~

  355. / J+ Y' ?0 a3 a  C
  356. sIsMember, sContains. i7 n: |5 g0 R8 D+ R
  357. 名称为key的集合中查找是否有value元素,有ture 没有 false
    0 H( K; B6 `$ \8 _4 c
  358. $redis->sIsMember(key, value);, m. i: @6 P; k0 x6 K9 w& v
  359. ' r9 u5 l. f) }2 O$ ~
  360. sCard, sSize
    ; ^$ ?% {# C9 n1 O+ S
  361. 返回名称为key的set的元素个数, e) G) S1 h9 V. V/ h! v5 l9 A
  362. / R: v$ f* V8 k9 b, [
  363. sPop
    7 t1 p/ U' ^: H* x, |
  364. 随机返回并删除名称为key的set中一个元素$ v8 u3 b0 J6 f3 p. p

  365. " ]/ p: V- B$ b9 ^8 B# h
  366. sRandMember; Z9 O0 i+ o$ D7 O: D$ ]
  367. 随机返回名称为key的set中一个元素,不删除
    6 H* x% p" j' A" p) X# `" C

  368. 3 a& G' B+ u5 r2 c
  369. sInter$ i7 e; M8 \6 z. u- }( L% h* i
  370. 求交集
    ! T6 I( M, [$ N7 s0 M/ e8 j

  371. . [8 t/ q- z% U8 q8 U
  372. sInterStore
    3 {  X7 L4 A- X0 |0 ~8 G" x
  373. 求交集并将交集保存到output的集合
    0 g6 ?3 g3 _( q: ^. X
  374. $redis->sInterStore('output', 'key1', 'key2', 'key3')# r7 c  W0 T! w1 `! J& _

  375. ( i5 S% Z6 _9 y7 H: l
  376. sUnion
    ! j3 i9 t: R2 b
  377. 求并集/ I, ~3 k+ Q1 Q6 ]2 a
  378. $redis->sUnion('s0', 's1', 's2');$ ?$ \$ n0 O3 S  u, M
  379. s0,s1,s2 同时求并集
    0 O: I* c# D  s! W9 @

  380. ' n* F4 S  }' U9 q+ i
  381. sUnionStore
    " |, x  _. p; e
  382. 求并集并将并集保存到output的集合
    - b7 @. ?# N1 D5 O0 I+ a7 p
  383. $redis->sUnionStore('output', 'key1', 'key2', 'key3');
    * B% b8 R, F6 L" `# x$ C+ ~

  384. 0 O: s. D+ \* l$ K! m+ H
  385. sDiff
    " B/ r+ E; P* X+ t$ q
  386. 求差集
    0 o) a- Z' G/ h/ l  X6 p: G! A
  387. 1 x# ^( n, ^" q
  388. sDiffStore
    % A6 }6 O! t4 I4 z* A
  389. 求差集并将差集保存到output的集合
    & ?; G# f6 m$ g: a. B" C7 N

  390. + }. H6 p3 x' f5 z4 P* ?; R
  391. sMembers, sGetMembers
    . ?. |: }/ V# A8 z6 r/ r/ Y
  392. 返回名称为key的set的所有元素
    9 G; _9 J' `" f# e. S8 l8 L6 ^. Y! k

  393. ; B, m1 ?! W8 R( V" l* x
  394. sort; K) j' D0 s2 x. f: D
  395. 排序,分页等
    0 e$ s; K* o9 A% M  i' L; v8 U
  396. 参数# U( p6 u; d. |" m
  397. 'by' => 'some_pattern_*',4 r! j& B3 |# ]5 ]# Q, f3 x
  398. 'limit' => array(0, 1),$ R0 f9 b- ^1 j( l: u8 G
  399. 'get' => 'some_other_pattern_*' or an array of patterns,
    1 c8 i9 T6 c( p: I
  400. 'sort' => 'asc' or 'desc',6 V2 N7 U) k+ _8 N9 h3 O
  401. 'alpha' => TRUE,8 q5 ~' e: y* g- o0 v9 l1 ]
  402. 'store' => 'external-key'
    ) I3 V8 E- U+ A" K1 g
  403. 例子2 R& h8 @& \+ ~* w, i3 A( 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);# g* f% w' L/ `" K3 t
  405. var_dump($redis->sort('s')); // 1,2,3,4,5# H- x2 }; w' p9 H
  406. var_dump($redis->sort('s', array('sort' => 'desc'))); // 5,4,3,2,1
    1 d3 @! [5 x* i! V  m, H
  407. var_dump($redis->sort('s', array('sort' => 'desc', 'store' => 'out'))); // (int)5
    ( S% a# _& }; @( X9 W

  408. 6 `3 l6 f& z  S1 ~6 R
  409. string命令
    ( k( F. o- {" r6 V- V% M2 [. c
  410. getSet
    ( w3 p  P9 e5 l" m! g$ M4 E
  411. 返回原来key中的值,并将value写入key& T- v8 k3 h0 Q6 j- E
  412. $redis->set('x', '42');
    - R3 W- {) B* I) S" R
  413. $exValue = $redis->getSet('x', 'lol'); // return '42', replaces x by 'lol'8 A- {. ?5 ?" m2 q( i
  414. $newValue = $redis->get('x')' // return 'lol'
    ( c2 ~/ V, D' r" `3 f( T' L

  415. 2 y& l0 ~8 p# u
  416. append0 {( t! @9 T1 K
  417. string,名称为key的string的值在后面加上value( Y. Z; @4 x1 B, G
  418. $redis->set('key', 'value1');. s# U- t: j, e% q" ]( ~  U( A
  419. $redis->append('key', 'value2');. L# h2 J  N6 l( U
  420. $redis->get('key');1 W' u5 a7 x0 f5 j0 P/ U7 j+ a+ c

  421. 0 r% I/ f* y4 r& z+ Z1 z1 `* C
  422. getRange (方法不存在): O  v& X: @1 D, H" ?+ E1 s
  423. 返回名称为key的string中start至end之间的字符
    % ^2 n9 K6 y1 o. x7 Z
  424. $redis->set('key', 'string value');9 C8 A# X# |2 C% P: \
  425. $redis->getRange('key', 0, 5);1 s' @/ z. m& ?# T% v7 p
  426. $redis->getRange('key', -5, -1);
    ! D1 t* r* f- w7 w. u) p) W

  427. 7 q+ w$ _- C9 k2 z' n
  428. setRange (方法不存在)6 |  J& e1 y. V' a0 }
  429. 改变key的string中start至end之间的字符为value4 Y( s% V8 Y& ]0 q2 c# z
  430. $redis->set('key', 'Hello world');5 l$ i/ D& f7 s2 L: H
  431. $redis->setRange('key', 6, "redis");
    : {* t$ k& P+ X2 \. L2 W% m
  432. $redis->get('key');
    9 s- x& ~+ A( n* Z/ K3 w
  433. # u# J; {8 G4 y3 G. `7 e+ ]- z9 |8 |
  434. strlen
    , p4 v6 I0 l4 \0 J5 Y/ L
  435. 得到key的string的长度7 N( W; i6 }0 P* x8 O9 s
  436. $redis->strlen('key');+ ]4 k4 I+ E( b

  437. 2 q# C8 b1 h2 j8 J9 Y
  438. getBit/setBit4 ]  O* N( l+ ^1 @! {) s5 L
  439. 返回2进制信息
    ! P+ S1 Y: n: c9 Q

  440. $ G) z! P5 G0 X) k# C8 S
  441. zset(sorted set)操作相关& J7 u$ Z4 y3 _2 a7 u/ J/ D
  442. zAdd(key, score, member):向名称为key的zset中添加元素member,score用于排序。如果该元素已经存在,则根据score更新该元素的顺序。: q5 b# j/ I3 w: Z+ G5 E* _
  443. $redis->zAdd('key', 1, 'val1');4 H9 f6 {3 L. B. |+ |7 I
  444. $redis->zAdd('key', 0, 'val0');
    : @/ y* K( F6 _' x+ N
  445. $redis->zAdd('key', 5, 'val5');# L4 o3 G# i0 e0 \
  446. $redis->zRange('key', 0, -1); // array(val0, val1, val5)3 @4 V8 y4 G/ f: [

  447. ( ^2 c# E0 h% r: y* O2 K
  448. zRange(key, start, end,withscores):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素
    ) Y$ w* d, U: E3 E
  449. $redis->zAdd('key1', 0, 'val0');
    : K4 \) P! r* N- d
  450. $redis->zAdd('key1', 2, 'val2');/ J9 N) `+ c) ~1 h0 ~
  451. $redis->zAdd('key1', 10, 'val10');0 h- b7 c/ _  e( ^
  452. $redis->zRange('key1', 0, -1); // with scores $redis->zRange('key1', 0, -1, true);
    ; I6 ^+ i9 e! }- a& _

  453. ! {! u4 g. e; ]2 c0 [  K
  454. zDelete, zRem
    2 j7 S' ?9 g. G! W4 y
  455. zRem(key, member) :删除名称为key的zset中的元素member# H, E, A* p- q- A8 x
  456. $redis->zAdd('key', 0, 'val0');
    ' j" ]6 X1 u# P8 L- s( ^* P
  457. $redis->zAdd('key', 2, 'val2');
    9 b& w3 H0 M0 I4 y8 r
  458. $redis->zAdd('key', 10, 'val10');
    0 n' T, X  f9 ~6 @* Z
  459. $redis->zDelete('key', 'val2');! s1 c, t3 ~* A- M2 f" e) F- H) ?8 Q
  460. $redis->zRange('key', 0, -1); 8 |4 a6 \/ R: E, p$ d; d) A6 Z
  461. ! e" Y/ C) P1 O+ j
  462. zRevRange(key, start, end,withscores):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素.withscores: 是否输出socre的值,默认false,不输出
    . U) J4 Z; T4 W% v5 Q  U
  463. $redis->zAdd('key', 0, 'val0');  F$ q, ~2 E* W+ n8 \2 L
  464. $redis->zAdd('key', 2, 'val2');
    ' [- G, g% R9 `+ }$ ]' g' b
  465. $redis->zAdd('key', 10, 'val10');1 N3 G; r8 l6 a. J9 k
  466. $redis->zRevRange('key', 0, -1); // with scores $redis->zRevRange('key', 0, -1, true);
    ! D) c* a3 z4 A. u. X1 Z

  467. % S$ c2 v- p9 Y5 [; V, d! l) {
  468. zRangeByScore, zRevRangeByScore
    - S" B& m: b. O/ ~
  469. $redis->zRangeByScore(key, star, end, array(withscores, limit ));$ S1 m3 W8 \3 b, `9 @6 R% O
  470. 返回名称为key的zset中score >= star且score <= end的所有元素# ?- U! C( W* \( t

  471. ) J: W  Y! ~  Q
  472. zCount! |6 @3 l8 b* |; [1 H+ Y9 u; Q
  473. $redis->zCount(key, star, end);
    ' h3 U) f7 ^6 N% Z8 r6 y  O
  474. 返回名称为key的zset中score >= star且score <= end的所有元素的个数3 O7 L7 h2 }: ?2 D, x- H; \! _

  475. 8 v+ z5 \" o" q
  476. zRemRangeByScore, zDeleteRangeByScore8 v4 S' {  }! ^& ~
  477. $redis->zRemRangeByScore('key', star, end);7 |; J" `7 E' b: C' r; z# P( N
  478. 删除名称为key的zset中score >= star且score <= end的所有元素,返回删除个数( J/ K; k( e, M( u: L
  479. # X+ \- t9 |' l7 t& I8 Y: p3 t
  480. zSize, zCard8 l, r3 E6 C8 p: D
  481. 返回名称为key的zset的所有元素的个数/ w3 D; v/ r. K( W
  482. ( {- I9 `* ^7 i, M
  483. zScore
    9 w3 e$ C4 d1 @
  484. $redis->zScore(key, val2);; Z7 u3 D' F  D: K0 \
  485. 返回名称为key的zset中元素val2的score5 y' ~3 {; C0 ^2 d
  486.   u( a" p# t) I  h
  487. zRank, zRevRank. G5 t  b  ]1 f( W  v" H& C3 [
  488. $redis->zRevRank(key, val);. j  m& f* d; F& ^
  489. 返回名称为key的zset(元素已按score从小到大排序)中val元素的rank(即index,从0开始),若没有val元素,返回“null”。zRevRank 是从大到小排序
    8 o' O( U" o( F+ b! l0 f
  490. * \% [% M7 b. V4 w2 j
  491. zIncrBy
    3 e$ g+ {7 m2 c+ Z6 p- F  }
  492. $redis->zIncrBy('key', increment, 'member');
    4 n* D/ Y  Z! z; c5 L
  493. 如果在名称为key的zset中已经存在元素member,则该元素的score增加increment;否则向集合中添加该元素,其score的值为increment- ^" O; d, ?/ u1 @2 y% O0 e9 ]
  494. 0 K* n( }% g. l
  495. zUnion/zInter' ]  x3 d1 }3 w$ Q0 b
  496. 参数
    6 |. p4 }9 G: ]; B8 T
  497. keyOutput! a7 H8 C8 p* m& E' {
  498. arrayZSetKeys- Q2 y9 x# Z8 C% M+ z
  499. arrayWeights
    : _9 `- j, U  w+ l' j7 \: \
  500. aggregateFunction Either "SUM", "MIN", or "MAX": defines the behaviour to use on duplicate entries during the zUnion.; E8 I2 [' {1 Y6 ?
  501. 对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。9 R' {( s, m& s" ?8 @9 s
复制代码
5 `; n" o- F  _# I

0 ]& T- i6 g5 F+ P9 b- l
$ o) J' B' M" d" v: o0 [+ n2 O+ d7 Y  O1 Q' c9 C' u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
沙发
 楼主| 发表于 2019-11-26 17:06:33 | 只看该作者
  1. $redis = new Redis(); . I* {' D+ M' l0 |
  2. //连接redis服务器
    # G+ @; T2 \" P
  3. $redis->connect('127.0.0.1', '6379');
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

GMT+8, 2026-6-20 06:04 , Processed in 0.076883 second(s), 21 queries .

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