1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
cacheengineredis.php
См. документацию.
1
<?php
2
3
namespace
Bitrix\Main\Data;
4
5
use Bitrix\Main\Config\Configuration;
6
use Bitrix\Main\Data\LocalStorage\Storage;
7
8
class
CacheEngineRedis
extends
Cache\KeyValueEngine
implements
Storage\CacheEngineInterface
9
{
10
public
function
getConnectionName
() : string
11
{
12
return
'cache.redis'
;
13
}
14
15
public
static
function
getConnectionClass
()
16
{
17
return
RedisConnection::class;
18
}
19
20
protected
function
configure
(
$options
= []):
array
21
{
22
$config
= parent::configure(
$options
);
23
24
$cacheConfig = Configuration::getValue(
'cache'
);
25
26
if
(isset($cacheConfig[
'serializer'
]))
27
{
28
$config
[
'serializer'
] = (int)$cacheConfig[
'serializer'
];
29
}
30
31
$config
[
'persistent'
] =
true
;
32
if
(isset($cacheConfig[
'persistent'
]) && $cacheConfig[
'persistent'
] == 0)
33
{
34
$config
[
'persistent'
] =
false
;
35
}
36
37
if
(isset($cacheConfig[
'compression'
]))
38
{
39
$config
[
'compression'
] = $cacheConfig[
'compression'
];
40
}
41
42
if
(isset($cacheConfig[
'compression_level'
]))
43
{
44
$config
[
'compression_level'
] = $cacheConfig[
'compression_level'
];
45
}
46
47
if
(isset($cacheConfig[
'timeout'
]))
48
{
49
$cacheConfig[
'timeout'
] = (float)$cacheConfig[
'timeout'
];
50
if
($cacheConfig[
'timeout'
] > 0)
51
{
52
$config
[
'timeout'
] = $cacheConfig[
'timeout'
];
53
}
54
}
55
56
if
(isset($cacheConfig[
'read_timeout'
]))
57
{
58
$cacheConfig[
'read_timeout'
] = (float)$cacheConfig[
'read_timeout'
];
59
if
($cacheConfig[
'read_timeout'
] > 0)
60
{
61
$config
[
'read_timeout'
] = $cacheConfig[
'read_timeout'
];
62
}
63
}
64
65
return
$config
;
66
}
67
68
public
function
set
(
$key
, $ttl, $value) : bool
69
{
70
$ttl = (int) $ttl;
71
if
($ttl > 0)
72
{
73
return
self::$engine->setex(
$key
, $ttl, $value);
74
}
75
else
76
{
77
return
self::$engine->set(
$key
, $value);
78
}
79
}
80
81
public
function
get
(
$key
)
82
{
83
return
self::$engine->get(
$key
);
84
}
85
86
public
function
del
(
$key
)
87
{
88
self::$engine->del(
$key
);
89
}
90
91
public
function
setNotExists
(
$key
, $ttl, $value)
92
{
93
$ttl = (int) $ttl;
94
if
(self::$engine->setnx(
$key
, $value))
95
{
96
if
($ttl > 0)
97
{
98
self::$engine->expire(
$key
, $ttl);
99
}
100
return
true
;
101
}
102
return
false
;
103
}
104
105
public
function
checkInSet
(
$key
, $value) : bool
106
{
107
return
self::$engine->sIsMember(
$key
, $value);
108
}
109
110
public
function
addToSet
(
$key
, $value)
111
{
112
self::$engine->sAdd(
$key
, $value);
113
}
114
115
public
function
getSet
(
$key
) :
array
116
{
117
$list = self::$engine->sMembers(
$key
);
118
if
(!is_array($list))
119
{
120
$list = [];
121
}
122
return
$list;
123
}
124
125
public
function
deleteBySet
(
$key
, $prefix =
''
)
126
{
127
$list = self::$engine->sMembers(
$key
);
128
self::$engine->del(
$key
);
129
130
if
(is_array($list) && !empty($list))
131
{
132
self::$engine->del($list);
133
}
134
}
135
136
public
function
delFromSet
(
$key
, $member)
137
{
138
if
(!is_array($member))
139
{
140
$member = [0 => $member];
141
}
142
143
if
(!empty($member))
144
{
145
self::$engine->sRem(
$key
, ...$member);
146
}
147
}
148
149
public
function
addCleanPath
(
array
$data
): void
150
{
151
self::$engine->lPush($this->sid .
'/cacheCleanPath'
,
$data
);
152
}
153
154
public
function
delayedDelete
(): void
155
{
156
$delta
= 10;
157
$deleted = 0;
158
$etime = time() + 5;
159
$needClean = self::$engine->get($this->sid .
'|needClean'
);
160
161
if
($needClean !==
'Y'
)
162
{
163
$this->
unlock
($this->sid .
'|cacheClean'
);
164
return
;
165
}
166
167
$count
= (int) self::$engine->
get
($this->sid .
'|delCount'
);
168
if
(
$count
< 1)
169
{
170
$count
= 1;
171
}
172
173
$step =
$count
+
$delta
;
174
for
(
$i
= 0;
$i
< $step;
$i
++)
175
{
176
$finished =
true
;
177
$paths
= self::$engine->rPop($this->sid .
'/cacheCleanPath'
);
178
if
(
$paths
)
179
{
180
$partitionListKey =
$paths
[
'PREFIX'
] .
'|'
. static::BX_INIT_DIR_LIST;
181
$partitionKeys = $this->
getSet
($partitionListKey);
182
foreach
($partitionKeys as $partition)
183
{
184
if
(time() > $etime)
185
{
186
$finished =
false
;
187
break
;
188
}
189
190
$this->
deleteBySet
($partitionListKey .
'|'
. $partition);
191
}
192
193
if
($finished)
194
{
195
$deleted++;
196
}
197
elseif
(time() > $etime)
198
{
199
self::$engine->lPush($this->sid .
'/cacheCleanPath'
,
$paths
);
200
break
;
201
}
202
}
203
else
204
{
205
break
;
206
}
207
}
208
209
if
($deleted >
$count
)
210
{
211
self::$engine->setex($this->sid .
'|delCount'
, 604800, $deleted);
212
}
213
elseif
($deleted < $count && $count > 1)
214
{
215
self::$engine->setex($this->sid .
'|delCount'
, 604800, --
$count
);
216
}
217
218
if
($deleted === 0)
219
{
220
self::$engine->setex($this->sid .
'|needClean'
, 3600,
'N'
);
221
}
222
223
$this->
unlock
($this->sid .
'|cacheClean'
);
224
}
225
}
$count
$count
Определения
admin_tab.php:4
Bitrix\Main\Data\Cache\KeyValueEngine
Определения
keyvalueengine.php:15
Bitrix\Main\Data\Cache\KeyValueEngine\unlock
unlock(string $key='')
Определения
keyvalueengine.php:250
Bitrix\Main\Data\CacheEngineRedis
Определения
cacheengineredis.php:9
Bitrix\Main\Data\CacheEngineRedis\delayedDelete
delayedDelete()
Определения
cacheengineredis.php:154
Bitrix\Main\Data\CacheEngineRedis\getSet
getSet($key)
Определения
cacheengineredis.php:115
Bitrix\Main\Data\CacheEngineRedis\getConnectionName
getConnectionName()
Определения
cacheengineredis.php:10
Bitrix\Main\Data\CacheEngineRedis\del
del($key)
Определения
cacheengineredis.php:86
Bitrix\Main\Data\CacheEngineRedis\deleteBySet
deleteBySet($key, $prefix='')
Определения
cacheengineredis.php:125
Bitrix\Main\Data\CacheEngineRedis\getConnectionClass
static getConnectionClass()
Определения
cacheengineredis.php:15
Bitrix\Main\Data\CacheEngineRedis\setNotExists
setNotExists($key, $ttl, $value)
Определения
cacheengineredis.php:91
Bitrix\Main\Data\CacheEngineRedis\addCleanPath
addCleanPath(array $data)
Определения
cacheengineredis.php:149
Bitrix\Main\Data\CacheEngineRedis\delFromSet
delFromSet($key, $member)
Определения
cacheengineredis.php:136
Bitrix\Main\Data\CacheEngineRedis\checkInSet
checkInSet($key, $value)
Определения
cacheengineredis.php:105
Bitrix\Main\Data\CacheEngineRedis\addToSet
addToSet($key, $value)
Определения
cacheengineredis.php:110
Bitrix\Main\Data\CacheEngineRedis\configure
configure($options=[])
Определения
cacheengineredis.php:20
$options
$options
Определения
commerceml2.php:49
$data
$data['IS_AVAILABLE']
Определения
.description.php:13
array
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения
file_new.php:804
Bitrix\Main\Data\CacheEngineInterface
Определения
cacheengineinterface.php:6
$delta
$delta
Определения
prolog_main_admin.php:363
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
$config
$config
Определения
quickway.php:69
$key
if(empty($signedUserToken)) $key
Определения
quickway.php:257
$i
$i
Определения
factura.php:643
$paths
$paths
Определения
options.php:2080
bitrix
modules
main
lib
data
cacheengineredis.php
Создано системой
1.14.0