PHPackages                             stoyishi/cache - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. stoyishi/cache

ActiveLibrary[Caching](/categories/caching)

stoyishi/cache
==============

PSR-16 compliant file-based cache system for PHP 7.4+

1.0.0(3mo ago)111MITPHPPHP &gt;=7.4

Since Feb 11Pushed 3mo agoCompare

[ Source](https://github.com/otabek-hasanov/caches)[ Packagist](https://packagist.org/packages/stoyishi/cache)[ RSS](/packages/stoyishi-cache/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (2)Used By (0)

FileCache - Fayl Asosli Kesh Tizimi
===================================

[](#filecache---fayl-asosli-kesh-tizimi)

PSR-16 SimpleCache standartiga mos keladigan PHP uchun fayl asosli kesh kutubxonasi.

Umumiy Ma'lumot
---------------

[](#umumiy-malumot)

FileCache - bu PSR-16 SimpleCache interfeysini to'liq amalga oshiradigan yengil va samarali fayl asosli kesh tizimi. U PHP ilovalaringizda ma'lumotlarni fayl tizimida saqlash orqali keshlashning oddiy va qulay usulini taqdim etadi.

Xususiyatlar
------------

[](#xususiyatlar)

- ✅ **PSR-16 Standartiga Mos** - `Psr\SimpleCache\CacheInterface` to'liq amalga oshirilgan
- 🗂️ **Ierarxik Saqlash** - Fayllarni samarali tashkil qilish uchun MD5 asosli katalog tuzilmasi
- 🔒 **Fayl Blokirovkasi** - Xavfsiz operatsiyalar uchun to'g'ri fayl blokirovkasi mexanizmi
- ⏰ **TTL Qo'llab-Quvvatlash** - Vaqt bilan avtomatik o'chib ketadigan kesh elementlari
- 🚀 **Ommaviy Operatsiyalar** - Ko'p get/set/delete operatsiyalarini qo'llab-quvvatlash
- 💾 **Seriyalashtirish** - Kesh qiymatlarini avtomatik seriyalashtirish/deseriyalashtirish

Talablar
--------

[](#talablar)

- PHP 7.0 yoki undan yuqori versiya
- PSR-16 SimpleCache interfeysi

O'rnatish
---------

[](#ornatish)

```
composer require stoyishi/cache
```

Keyin `autoload.php` klassini loyihangizga qo'shing:

```
require_once 'vendor/autoload.php';

use Stoyishi\Cache\FileCache;
```

Foydalanish
-----------

[](#foydalanish)

### Asosiy Foydalanish

[](#asosiy-foydalanish)

```
use Stoyishi\Cache\FileCache;

// Keshni ishga tushirish
$cache = new FileCache('/path/to/cache/directory');

// Kesh elementini saqlash
$cache->set('user_123', ['name' => 'John Doe', 'email' => 'john@example.com']);

// Kesh elementini olish
$user = $cache->get('user_123');

// Element mavjudligini tekshirish
if ($cache->has('user_123')) {
    echo "Kesh topildi!";
}

// Kesh elementini o'chirish
$cache->delete('user_123');

// Barcha keshni tozalash
$cache->clear();
```

### Yashash Muddati (TTL)

[](#yashash-muddati-ttl)

```
// 1 soat davomida keshlash (3600 soniya)
$cache->set('session_data', $sessionData, 3600);

// 1 kun davomida keshlash (standart TTL 86400 soniya)
$cache->set('daily_stats', $stats);

// Doimiy saqlash (yoki qo'lda o'chirilmaguncha)
$cache->set('permanent_data', $data, PHP_INT_MAX);
```

### Ommaviy Operatsiyalar

[](#ommaviy-operatsiyalar)

```
// Bir vaqtning o'zida bir nechta elementlarni saqlash
$cache->setMultiple([
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
], 3600);

// Bir vaqtning o'zida bir nechta elementlarni olish
$values = $cache->getMultiple(['key1', 'key2', 'key3']);

// Bir nechta elementlarni o'chirish
$cache->deleteMultiple(['key1', 'key2', 'key3']);
```

### Standart Qiymatlar

[](#standart-qiymatlar)

```
// Agar kalit topilmasa, standart qiymatni qaytarish
$value = $cache->get('mavjud_emas', 'standart_qiymat');

// Natija: 'standart_qiymat'
```

API Ma'lumotnomasi
------------------

[](#api-malumotnomasi)

### Konstruktor

[](#konstruktor)

```
public function __construct(string $path)
```

Belgilangan kesh katalogi bilan yangi FileCache nusxasini yaratadi.

**Parametrlar:**

- `$path` - Kesh fayllari saqlanadigan katalog yo'li

### get()

[](#get)

```
public function get($key, $default = null)
```

Keshdan qiymatni oladi.

**Parametrlar:**

- `$key` - Elementning noyob kaliti
- `$default` - Kalit topilmasa qaytariladigan standart qiymat

**Qaytaradi:** Keshlangan qiymat yoki standart qiymat

### set()

[](#set)

```
public function set($key, $value, $ttl = null)
```

Ma'lumotni keshda saqlaydi.

**Parametrlar:**

- `$key` - Elementning noyob kaliti
- `$value` - Keshlanadigan qiymat (seriyalashtiriladi)
- `$ttl` - Yashash muddati soniyalarda (null bo'lsa standart 86400)

**Qaytaradi:** Muvaffaqiyatli bo'lsa `true`

### delete()

[](#delete)

```
public function delete($key)
```

Elementni keshdan o'chiradi.

**Parametrlar:**

- `$key` - Elementning noyob kaliti

**Qaytaradi:** Muvaffaqiyatli bo'lsa `true`

### clear()

[](#clear)

```
public function clear()
```

Barcha kesh kalitlarini to'liq tozalaydi.

**Qaytaradi:** Muvaffaqiyatli bo'lsa `true`

### has()

[](#has)

```
public function has($key)
```

Elementning keshda mavjudligini aniqlaydi.

**Parametrlar:**

- `$key` - Elementning noyob kaliti

**Qaytaradi:** Element mavjud bo'lsa `true`, aks holda `false`

### getMultiple()

[](#getmultiple)

```
public function getMultiple($keys, $default = null)
```

Noyob kalitlar bo'yicha bir nechta kesh elementlarini oladi.

**Parametrlar:**

- `$keys` - Kalitlar massivi
- `$default` - Topilmagan kalitlar uchun standart qiymat

**Qaytaradi:** Kalit-qiymat juftliklari massivi

### setMultiple()

[](#setmultiple)

```
public function setMultiple($values, $ttl = null)
```

Keshda kalit-qiymat juftliklari to'plamini saqlaydi.

**Parametrlar:**

- `$values` - Kalit-qiymat juftliklari massivi
- `$ttl` - Yashash muddati soniyalarda

**Qaytaradi:** Muvaffaqiyatli bo'lsa `true`

### deleteMultiple()

[](#deletemultiple)

```
public function deleteMultiple($keys)
```

Bir nechta kesh elementlarini o'chiradi.

**Parametrlar:**

- `$keys` - O'chiriladigan kalitlar massivi

**Qaytaradi:** Muvaffaqiyatli bo'lsa `true`

Katalog Tuzilmasi
-----------------

[](#katalog-tuzilmasi)

FileCache MD5 xeshlashga asoslangan ierarxik katalog tuzilmasidan foydalanadi:

```
cache/
├── ab/
│   ├── cd/
│   │   ├── abcd1234567890.cache
│   │   └── abcdef9876543210.cache
│   └── ef/
└── 12/
    └── 34/

```

Har bir kesh kaliti MD5 bilan xeshlanadi va birinchi 4 ta belgi pastki katalog tuzilmasini (2 daraja chuqurlik) belgilaydi.

Xavfsizlik
----------

[](#xavfsizlik)

FileCache operatsiyalarning xavfsizligini ta'minlash uchun PHP ning `flock()` funksiyasidan foydalanadi:

- **Umumiy blokirovka (LOCK\_SH)** - o'qish operatsiyalari uchun
- **Eksklyuziv blokirovka (LOCK\_EX)** - yozish operatsiyalari uchun

Ishlash Samaradorligi
---------------------

[](#ishlash-samaradorligi)

1. **Katalog Tuzilmasi**: Ikki darajali katalog ierarxiyasi bitta katalogda juda ko'p fayllar bo'lishining oldini oladi
2. **Fayl Blokirovkasi**: Ma'lumotlar yaxlitligini ta'minlaydi, lekin yuqori yuklamada ishlashga ta'sir qilishi mumkin
3. **Seriyalashtirish**: Maksimal muvofiqlik uchun PHP ning `serialize()` funksiyasidan foydalanadi
4. **Avtomatik Tozalash**: Muddati o'tgan elementlar ularga murojaat qilinganda o'chiriladi

Eng Yaxshi Amaliyotlar
----------------------

[](#eng-yaxshi-amaliyotlar)

```
// 1. Ma'noli kesh kalitlaridan foydalaning
$cache->set('user_profile_' . $userId, $profile);

// 2. Ma'lumotlar o'zgaruvchanligi asosida mos TTL o'rnating
$cache->set('real_time_stock', $price, 60);      // 1 daqiqa
$cache->set('daily_report', $report, 86400);     // 1 kun
$cache->set('static_config', $config, 604800);   // 1 hafta

// 3. Kesh topilmasa, to'g'ri ishlov bering
$data = $cache->get('expensive_query');
if ($data === null) {
    $data = performExpensiveQuery();
    $cache->set('expensive_query', $data, 3600);
}

// 4. Imkon qadar ommaviy operatsiyalardan foydalaning
$cache->setMultiple($bulkData);
```

Xatolarni Qayta Ishlash
-----------------------

[](#xatolarni-qayta-ishlash)

Kesh tizimi umumiy holatlarni avtomatik boshqaradi:

- Kesh katalogi mavjud bo'lmasa, uni yaratadi
- Topilmagan/muddati o'tgan elementlar uchun standart qiymatlarni qaytaradi
- Fayl blokirovkasi xatolarini xavfsiz boshqaradi

Misol
-----

[](#misol)

```
