ホームページ > バックエンド開発 > PHPチュートリアル > Redisキャッシュクラスの定義と使い方を詳しく解説

Redisキャッシュクラスの定義と使い方を詳しく解説

小云云
リリース: 2023-03-19 18:22:02
オリジナル
2213 人が閲覧しました

この記事では、PHP で実装された Redis キャッシュ クラスを主に紹介し、PHP でカプセル化された Redis キャッシュ クラスの定義と使用に関する操作スキルを具体的な例の形式で分析します。みんなを助けることができる。

php+redis キャッシュ クラス

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

<?php

class redisCache {

  /**

  * $host : redis服务器ip

  * $port : redis服务器端口

  * $lifetime : 缓存文件有效期,单位为秒

  * $cacheid : 缓存文件路径,包含文件名

  */

  private $host;

  private $port;

  private $lifetime;

  private $cacheid;

  private $data;

  public $redis;

  /**

  * 析构函数,检查缓存目录是否有效,默认赋值

  */

  function __construct($lifetime=1800) {

    //配置

    $this->host = "127.0.0.1";

    $this->port = "6379";

    $redis = new Redis();

    $redis->pconnect($this->host,$this->port);

    $this->redis=$redis;

    $this->cacheid = $this->getcacheid();

    $this->lifetime = $lifetime;

    $this->data=$redis->hMGet($this->cacheid, array(&#39;content&#39;,&#39;creattime&#39;));

    //print_r($this->redis);

    //print_r($this->data);

  }

  /**

  * 检查缓存是否有效

  */

  private function isvalid(){

    $data=$this->data;

    if (!$data[&#39;content&#39;]) return false;

    if (time() - $data[&#39;creattime&#39;] > $this->lifetime) return false;

    return true;

  }

  /**

  * 写入缓存

  * $mode == 0 , 以浏览器缓存的方式取得页面内容

  */

  public function write($mode=0,$content=&#39;&#39;) {

    switch ($mode) {

      case 0:

        $content = ob_get_contents();

        break;

      default:

        break;

    }

    ob_end_flush();

    try {

      $this->redis->hMset($this->cacheid, array(&#39;content&#39;=>$content,&#39;creattime&#39;=>time()));

      $this->redis->expireAt($this->cacheid, time() + $this->lifetime);

    }

    catch (Exception $e) {

      $this->error(&#39;写入缓存失败!&#39;);

    }

  }

  /**

  * 加载缓存

  * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存

  * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容

  */

  public function load() {

    if ($this->isvalid()) {

      echo $this->data[&#39;content&#39;];

      exit();

    }

    else {

      ob_start();

    }

  }

  /**

  * 清除缓存

  */

  public function clean() {

    try {

      $this->redis->hDel($this->cacheid, array(&#39;content&#39;,&#39;creattime&#39;));

    }

    catch (Exception $e) {

      $this->error(&#39;清除缓存失败!&#39;);

    }

  }

  /**

  * 取得缓存文件路径

  */

  private function getcacheid() {

    return $this->dir.md5($this->geturl()).$this->ext;

  }

  /**

  * 取得当前页面完整url

  */

  private function geturl() {

    $url = &#39;&#39;;

    if (isset($_SERVER[&#39;REQUEST_URI&#39;])) {

      $url = $_SERVER[&#39;REQUEST_URI&#39;];

    }

    else {

      $url = $_SERVER[&#39;Php_SELF&#39;];

      $url .= empty($_SERVER[&#39;QUERY_STRING&#39;])?&#39;&#39;:&#39;?&#39;.$_SERVER[&#39;QUERY_STRING&#39;];

    }

    return $url;

  }

  /**

  * 输出错误信息

  */

  private function error($str) {

    echo &#39;<p style="color:red;">&#39;.$str.&#39;</p>&#39;;

  }

}

//用法:

// require_once(&#39;redisCache.php&#39;);

// $cache = new redisCache(10); //设置缓存生存期

// if ($_GET[&#39;clearCache&#39;]) $cache->clean();

// else $cache->load(); //装载缓存,缓存有效则不执行以下页面代码

// //页面代码开始

// //页面代码结束

// $cache->write(); //首次运行或缓存过期,生成缓存

?>

ログイン後にコピー

関連する推奨事項:

単純な PHP キャッシュ クラスを共有する

以上がRedisキャッシュクラスの定義と使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート