RedisCache.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace utils;
  3. use think\facade\Cache;
  4. /**
  5. * Redis 缓存封装 by wes
  6. * Class RedisCache
  7. * @package utils
  8. */
  9. class RedisCache
  10. {
  11. public static function get($key)
  12. {
  13. $redis = Cache::store('redis')->handler();
  14. $data = $redis->get($key);
  15. $jsonData = $data? json_decode($data, true) : [];
  16. return $jsonData? $jsonData : $data;
  17. }
  18. /**
  19. * 设置缓存
  20. * @param $key 键名
  21. * @param $data 数据:数组和字符串,数组自动转化JSON
  22. * @param int $expire 有效期:0为永久
  23. * @return mixed
  24. */
  25. public static function set($key, $data, $expire =null)
  26. {
  27. $expire = $expire !=null ? $expire : config('cache.stores.redis.expire', 24 * 3600);
  28. $data = is_array($data) && !empty($data)? json_encode($data, 256) : $data;
  29. $data = !empty($data)? $data : null;
  30. $redis = Cache::store('redis')->handler();
  31. if ($expire > 0) {
  32. return $redis->setex($key, $expire, $data);
  33. } else {
  34. return $redis->set($key, $data);
  35. }
  36. }
  37. /**
  38. * 键名是否存在
  39. * @param $key
  40. * @param $expire
  41. * @return mixed
  42. */
  43. public static function exists($key){
  44. $redis = Cache::store('redis')->handler();
  45. return $redis->exists($key);
  46. }
  47. /**
  48. * 递增
  49. * @param $key
  50. * @return bool
  51. */
  52. public static function incr($key, $step=1){
  53. $redis = Cache::store('redis')->handler();
  54. return $redis->incrby($key, $step);
  55. }
  56. /**
  57. * 递减
  58. * @param $key
  59. * @return bool
  60. */
  61. public static function decr($key, $step=1){
  62. $redis = Cache::store('redis')->handler();
  63. return $redis->decrby($key, $step);
  64. }
  65. /**
  66. * 进队列缓存
  67. * @param $key 键名
  68. * @param $data 队列数据
  69. * @param bool $clear 是否清除之前数据
  70. * @return mixed
  71. */
  72. public static function rPush($key, $data, $clear = false)
  73. {
  74. $redis = Cache::store('redis')->handler();
  75. if ($clear) {
  76. $redis->del($key);
  77. }
  78. $data = is_array($data) ? json_encode($data, 256) : $data;
  79. return $redis->rpush($key, $data);
  80. }
  81. /**
  82. * 出队列
  83. * @param $key 键名
  84. * @return array|mixed
  85. */
  86. public static function lPop($key)
  87. {
  88. $redis = Cache::store('redis')->handler();
  89. $data = $redis->lpop($key);
  90. $jsonData = $data ? json_decode($data, true) : [];
  91. return $jsonData ? $jsonData : $data;
  92. }
  93. /**
  94. * 清除缓存
  95. * @param $key 键名
  96. * @return mixed
  97. */
  98. public static function clear($key)
  99. {
  100. $redis = Cache::store('redis')->handler();
  101. return $redis->del($key);
  102. }
  103. /**
  104. * 按键名匹配删除
  105. * @param $key
  106. * @return bool
  107. */
  108. public static function keyDel($key){
  109. $redis = Cache::store('redis')->handler();
  110. $keys = $redis->keys($key);
  111. foreach($keys as $key){
  112. $redis->del($key);
  113. }
  114. return true;
  115. }
  116. /**
  117. * 有效期设置
  118. * @param $key
  119. * @param $expire
  120. * @return mixed
  121. */
  122. public static function expire($key, $expire){
  123. $redis = Cache::store('redis')->handler();
  124. return $redis->expire($key, $expire);
  125. }
  126. /**
  127. * 原子锁
  128. * @param $key
  129. * @param $value
  130. * @param int $expire
  131. * @return mixed
  132. */
  133. public static function setnx($key, $value, $expire=0){
  134. $redis = Cache::store('redis')->handler();
  135. $res = $redis->setnx($key, $value);
  136. if($expire){
  137. $redis->expire($key, $expire);
  138. }
  139. return $res;
  140. }
  141. }