RedisDataServer.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. namespace App\Servers;
  3. use Illuminate\Support\Facades\Redis;
  4. /**
  5. * Redis服务
  6. */
  7. class RedisDataServer
  8. {
  9. /**
  10. * 错误信息
  11. * @var string
  12. */
  13. private $errorMsg = '';
  14. static private $server = null;
  15. private function __construct()
  16. {
  17. }
  18. /**
  19. * 创建对象
  20. * @return RedisDataServer
  21. */
  22. static function creatServer()
  23. {
  24. if (empty(self::$server)) self::$server = new RedisDataServer();
  25. return self::$server;
  26. }
  27. /**
  28. * 获取随机数
  29. * @return int
  30. */
  31. private function getRandom()
  32. {
  33. return mt_rand(1, 10);
  34. }
  35. /**
  36. * 获取缓存数据
  37. * @param $key
  38. * @param string $type
  39. * @return mixed
  40. */
  41. function getData($key, $type = 'str')
  42. {
  43. $value = Redis::get($key);
  44. if (!empty($value) && $type == 'json') {
  45. $value = json_decode($value, true);
  46. }
  47. return $value;
  48. }
  49. /**
  50. * 设置缓存数据
  51. * @param $key
  52. * @param $value
  53. * @param string $type
  54. * @param int $time
  55. * @param $random
  56. */
  57. function setData($key, $value, $type = 'str', $time = 10, $random = true)
  58. {
  59. if (!empty($value)) {
  60. if ($type == 'json') {
  61. $value = json_encode($value);
  62. }
  63. if ($time > 1 && $random) $time += $this->getRandom();
  64. Redis::setex($key, $time, $value);
  65. }
  66. }
  67. /**
  68. * 删除Redis数据
  69. * @param $key
  70. */
  71. function delData($key)
  72. {
  73. Redis::del($key);
  74. }
  75. /**
  76. * 添加序号
  77. * @param $key
  78. * @param $num
  79. * @return false|int
  80. */
  81. function addQueue($key, $num)
  82. {
  83. return Redis::lpush($key, ...$num);
  84. }
  85. function addOneQueue($key, $num)
  86. {
  87. return Redis::lpush($key, $num);
  88. }
  89. /**
  90. * 弹出队列数据
  91. * @param $key
  92. * @return false
  93. */
  94. function getQueue($key)
  95. {
  96. $key_num = Redis::rpop($key);
  97. if (empty($key_num)) $key_num = false;
  98. return $key_num;
  99. }
  100. /**
  101. *
  102. * 获取队列数据长度
  103. * @param $key
  104. * @return false|int
  105. */
  106. function getQueueList($key)
  107. {
  108. return Redis::llen($key);
  109. }
  110. /**
  111. * 设置自增
  112. * @param $key
  113. * @return void
  114. */
  115. function setIncr($key)
  116. {
  117. Redis::incr($key);
  118. }
  119. /**
  120. * key加锁
  121. * @param $key
  122. * @param $value
  123. * @param int $time
  124. * @return mixed
  125. */
  126. function lockKey($key,$value,$time = 10){
  127. return Redis::set($key, $value, 'px', $time, 'nx');//以毫秒为单位
  128. // return Redis::set($key, $value, 'ex', $time, 'nx');//以秒为单位
  129. }
  130. /**
  131. * 解锁
  132. * @param $key
  133. * @param $value
  134. * @return mixed
  135. */
  136. function unLockKey($key, $value)
  137. {
  138. $res = $this->getData($key);
  139. if ($res == $value) {
  140. return Redis::del($key);
  141. }
  142. }
  143. }