ListTrait.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace tw\redis\traits;
  3. use tw\redis\TwRedis;
  4. trait ListTrait
  5. {
  6. /**
  7. * 头部插入一个或多个元素
  8. *
  9. * @param int|string|array $vals: 待插入元素
  10. * @return int|bool: List 长度|false, 当 $word 存在并且构成的 key 不是 List 类型时失败
  11. */
  12. public function lpush($word, $vals)
  13. {
  14. if (is_array($vals)) {
  15. return TwRedis::lPush($this->key($word), ...$vals);
  16. } else {
  17. return TwRedis::lPush($this->key($word), $vals);
  18. }
  19. }
  20. /**
  21. * 从尾部追加元素
  22. *
  23. * @param string|int|array $vals
  24. * @return int|bool: key 存在并且类型不为 List 时返回 false
  25. */
  26. public function rpush($word, $vals)
  27. {
  28. if (is_array($vals)) {
  29. return TwRedis::rPush($this->key($word), ...$vals);
  30. } else {
  31. return TwRedis::rPush($this->key($word), $vals);
  32. }
  33. }
  34. /**
  35. * 移除并返回 List 第一个元素
  36. *
  37. * @param int|string $word: key 关键字
  38. * @return bool|string: 空 List 返回 false, 否则返回值
  39. */
  40. public function lpop($word)
  41. {
  42. return TwRedis::lPop($this->key($word));
  43. }
  44. /**
  45. * 返回并删除最后一个元素
  46. *
  47. * @return string|bool: 空 List 返回 false
  48. */
  49. public function rpop($word)
  50. {
  51. return TwRedis::rPop($this->key($word));
  52. }
  53. public function lrange($word, $start, $stop) : array
  54. {
  55. return TwRedis::lRange($this->key($word), $start, $stop);
  56. }
  57. /**
  58. * 删除指定元素(注意这个函数复杂度为O(n))
  59. *
  60. * @param string $val: 元素值
  61. * @param int $num: 删除个数,0表示所有,负值表示从尾部开始删
  62. * @return int|bool: 删除个数|false
  63. */
  64. public function lrem($word, $val, $num)
  65. {
  66. return TwRedis::lRem($this->key($word), $val, $num);
  67. }
  68. /**
  69. * 从头部删除指定个数的元素
  70. *
  71. * @param int $start
  72. * @param int $stop
  73. * @return array|bool: 已删元素|失败
  74. */
  75. public function ltrim($word, $start, $stop)
  76. {
  77. return TwRedis::lTrim($this->key($word), $start, $stop);
  78. }
  79. /**
  80. * 插入 $val 到 $pivot 后
  81. *
  82. * @return int: -1 表示 $pivot 未找到
  83. */
  84. public function linsert_after($word, $pivot, $val) : int
  85. {
  86. return TwRedis::lInsert($this->key($word), \Redis::AFTER, $pivot, $val);
  87. }
  88. /**
  89. * 插入 $val 到 $pivot 前
  90. *
  91. * @return int: -1 表示 $pivot 未找到
  92. */
  93. public function linsert_before($word, $pivot, $val) : int
  94. {
  95. return TwRedis::lInsert($this->key($word), \Redis::BEFORE, $pivot, $val);
  96. }
  97. /**
  98. * 求长度
  99. *
  100. * @return int|bool: 长度|失败(当 key 不是 List)
  101. */
  102. public function llen($word)
  103. {
  104. return TwRedis::lLen($this->key($word));
  105. }
  106. }