Passed
Push — dev ( 4d1626...1e4d6c )
by 世昌
02:25
created

RedisCache::has()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 1
b 0
f 0
1
<?php
2
3
4
namespace suda\framework\cache;
5
6
7
use Redis;
8
use suda\framework\Cache;
9
10
/**
11
 * Class RedisCache
12
 * @package suda\framework\cache
13
 */
14
class RedisCache implements Cache
15
{
16
    /**
17
     * @var array
18
     */
19
    protected $config;
20
21
    /**
22
     * @var Redis
23
     */
24
    protected $redis;
25
26
    /**
27
     * @var string
28
     */
29
    protected $prefix;
30
31
32
    /**
33
     * RedisCache constructor.
34
     * @param array $config
35
     */
36
    public function __construct(array $config = [])
37
    {
38
        $this->config = $config;
39
        $this->prefix = $config['prefix'] ?? 'suda_cache:';
40
        $this->redis = new Redis();
41
        $this->connect($config);
42
        $this->redis->setOption(Redis::OPT_PREFIX, $this->prefix);
43
        $this->redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
44
    }
45
46
    /**
47
     * @param array $config
48
     * @return bool
49
     */
50
    private function connect(array $config) {
51
        $host = $config['host'] ?? '127.0.0.1';
52
        $port = $config['port'] ?? 6379;
53
        $timeout = floatval($config['timeout'] ?? 0.0);
54
        $connect = $this->redis->pconnect($host, $port, $timeout);
55
        if ($connect && array_key_exists('password', $config)) {
56
            return $this->redis->auth($config['password']);
57
        }
58
        return $connect;
59
    }
60
61
    /**
62
     * 设置 Cache
63
     *
64
     * @param string $name
65
     * @param mixed $value
66
     * @param int $expire
67
     * @return bool
68
     */
69
    public function set(string $name, $value, int $expire = null): bool
70
    {
71
        if (is_integer($expire) && $expire > 0) {
72
            return $this->redis->set($name, $value, $expire);
73
        }
74
        return $this->redis->set($name, $value);
75
    }
76
77
    /**
78
     * 获取Cache
79
     *
80
     * @param string $name
81
     * @param mixed $default
82
     * @return mixed
83
     */
84
    public function get(string $name, $default = null)
85
    {
86
        if ($this->has($name)) {
87
            return $this->redis->get($name);
88
        }
89
        return $default;
90
    }
91
92
    /**
93
     * 删除一个或者全部Cache数据
94
     *
95
     * @param string|null $name
96
     * @return bool
97
     */
98
    public function delete(?string $name = null): bool
99
    {
100
        if (is_null($name)) {
101
            $this->clear();
102
        }
103
        return $this->redis->del($name) > 0;
104
    }
105
106
    /**
107
     * 检测是否存在Cache
108
     *
109
     * @param string $name
110
     * @return boolean
111
     */
112
    public function has(string $name): bool
113
    {
114
        return $this->redis->exists($name) > 0;
115
    }
116
117
    /**
118
     * 清除 Cache
119
     *
120
     * @return boolean
121
     */
122
    public function clear(): bool
123
    {
124
        $keys = $this->redis->keys('*');
125
        return $this->redis->del($keys) > 0;
126
    }
127
128
    public function __destruct()
129
    {
130
        $this->redis->close();
131
    }
132
}