当前位置:Gxlcms > PHP教程 > redis操作类(支持主从)

redis操作类(支持主从)

时间:2021-07-01 10:21:17 帮助过:8人阅读

基本配置文件:

  1. <!--?php
  2. $CONFIG_REDIS_DEFAULT = array(
  3. 'master' =--> array('127.0.0.1',6379),
  4. 'slaver' => array('127.0.0.1',6379)
  5. );
  6. ?>

操作类:

  1. <!--?php
  2. class FSRedis {
  3. const RD_MASTER = 'master';
  4. const RD_SLAVER = 'slaver';
  5. //默认key
  6. private static $mKey = '';
  7. //实例对象
  8. private static $mInstance = array();
  9. //服务器配置
  10. private $_serverConfig = array();
  11. private $_redisMaster;
  12. private $_redisSlaver;
  13. public static function Instance($defaultConfig = array()) {
  14. self::$mKey = md5(serialize($defaultConfig));
  15. if (isset( self::$mInstance[self::$mKey])) {
  16. return self::$mInstance[self::$mKey];
  17. }
  18. return self::$mInstance[self::$mKey] = new FSRedis($defaultConfig);
  19. }
  20. public function __construct($defaultConfig = array()) {
  21. $this--->_serverConfig = $defaultConfig;
  22. }
  23. private function createRedisInstance($config = array()) {
  24. if (count($config) < 2) {
  25. throw new Exception(strtr('Config invalid', array()));
  26. }
  27. $redis = new Redis();
  28. $redis->connect($config[0], $config[1]);
  29. return $redis;
  30. }
  31. public function getRedisMaster() {
  32. if ($this->_redisMaster === null) {
  33. $this->_redisMaster = $this->createRedisInstance($this->_serverConfig[self::RD_MASTER]) ;
  34. }
  35. return $this->_redisMaster;
  36. }
  37. public function getRedisSlave() {
  38. if ($this->_redisSlaver === null) {
  39. $this->_redisSlaver = $this->createRedisInstance($this->_serverConfig[self::RD_SLAVER]) ;
  40. }
  41. return $this->_redisSlaver;
  42. }
  43. public function get($key, $master = false) {
  44. if(empty($key)) {
  45. return false;
  46. }
  47. $func = is_array($key) ? 'mGet' : 'get';
  48. if($master) {
  49. $redis = $this->getRedisMaster();
  50. }else{
  51. $redis = $this->getRedisSlave();
  52. }
  53. if(!$redis) {
  54. return false;
  55. }
  56. $value = $redis->$func($key);
  57. if($value === false) {
  58. return false;
  59. }
  60. return $value;
  61. }
  62. public function set($key, $value, $expire = 0) {
  63. if(empty($key)) {
  64. return false;
  65. }
  66. $redis = $this->getRedisMaster();
  67. if(!$redis) {
  68. return false;
  69. }
  70. if($expire) {
  71. $ret = $redis->setex($key, $expire, $value);
  72. }
  73. else {
  74. $ret = $redis->set($key, $value);
  75. }
  76. if($ret === false) {
  77. return false;
  78. }
  79. return $ret;
  80. }
  81. /**
  82. * 条件形式设置缓存,如果 key 不存时就设置,存在时设置失败
  83. *
  84. * @param string $key 缓存KEY
  85. * @param string $value 缓存值
  86. * @return boolean
  87. */
  88. public function setnx($key, $value){
  89. return $this->getRedisMaster()->setnx($key, $value);
  90. }
  91. /**
  92. * 删除缓存
  93. *
  94. * @param string || array $key 缓存KEY,支持单个健:"key1" 或多个健:array('key1','key2')
  95. * @return int 删除的健的数量
  96. */
  97. public function remove($key){
  98. return $this->getRedisMaster()->delete($key);
  99. }
  100. public function __call($name,$value) {
  101. /**
  102. * 读写分离
  103. */
  104. $redisWrite = array('zAdd','zRem','hIncrBy','info','rename', 'rpush', 'lpop','hMset', 'sadd', 'srem', 'incr', 'spop');
  105. $redisRead = array('zCard','zRank','zrevRank','zRevRange','hLen','hKeys','hVals','zRange','hMget','hGetAll', 'lrange', 'llen','mGet', 'smembers', 'sismember', 'scard', 'keys');
  106. if(in_array($name,$redisWrite)) { //master
  107. $redis = $this->getRedisMaster();
  108. return call_user_func_array(array($redis,$name),$value);
  109. }
  110. elseif(in_array($name,$redisRead)) { //slave
  111. $redis = $this->_getRedisSlave();
  112. return call_user_func_array(array($redis,$name),$value);
  113. }
  114. }
  115. }
  116. ?>

以上就介绍了redis操作类(支持主从),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行