Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/updates/update_m1740164472/main/lib/data/
Upload File :
Current File : /var/www/homesaver/www/bitrix/updates/update_m1740164472/main/lib/data/cacheengineredis.php

<?php
namespace Bitrix\Main\Data;

class CacheEngineRedis extends CacheEngine
{
	public function getConnectionName() : string
	{
		return 'cache.redis';
	}

	public static function getConnectionClass()
	{
		return RedisConnection::class;
	}

	public function set($key, $ttl, $value) : bool
	{
		$ttl = (int) $ttl;
		if ($ttl > 0)
		{
			return self::$engine->setex($key, $ttl, $value);
		}
		else
		{
			return self::$engine->set($key, $value);
		}
	}

	public function get($key)
	{
		return self::$engine->get($key);
	}

	public function del($key)
	{
		self::$engine->del($key);
	}

	public function setNotExists($key, $ttl, $value)
	{
		$ttl = (int) $ttl;
		if (self::$engine->setnx($key, $value))
		{
			if ($ttl > 0)
			{
				self::$engine->expire($key, $ttl);
			}

			return true;
		}

		return false;
	}

	public function checkInSet($key, $value) : bool
	{
		return self::$engine->sIsMember($key, $value);
	}

	public function addToSet($key, $value)
	{
		self::$engine->sAdd($key, $value);
	}

	public function getSet($key) : array
	{
		$list = self::$engine->sMembers($key);
		if (!is_array($list))
		{
			$list = [];
		}
		return $list;
	}

	public function deleteBySet($key, $prefix = '')
	{
		$list = self::$engine->sMembers($key);
		self::$engine->del($key);

		if (is_array($list)  && !empty($list))
		{
			if ($this->useLock)
			{
				foreach ($list as $iKey)
				{
					$delKey = $prefix . $iKey;
					$oldKey = $delKey . '|old';

					if (self::$engine->rename($delKey, $oldKey))
					{
						self::$engine->expire($oldKey, $this->ttlOld);
					}
				}
			}
			else
			{
				if ($prefix != '')
				{
					$format = $prefix . '%s';
					$list = array_map(function ($key) use ($format) {
						return sprintf($format, $key);
					}, $list);
				}

				self::$engine->del($list);
			}
		}
	}

	public function delFromSet($key, $member)
	{
		if (is_array($member))
		{
			if (!empty($member))
			{
				self::$engine->sRem($key, ...$member);
			}
		}
		else
		{
			self::$engine->sRem($key, $member);
		}
	}
}