Redis یکی از برترین دیتابیس های Nosql است که اطلاعات در آن بصورت Key و Value، بر روی معماری داخلی سیستم ذخیره سازی میشود . در واقع این نوع بانک اطلاعاتی برای ورود و خروج اطلاعات از sql استفاده نمی کند .
موارد استفاده از redis
Salvatore Sanfilippo سازنده redis معتقد است که این نوع دیتابیس می تواند جایگزین RDBMS می باشد ولی به نظر من این ایده مناسب نمی باشد و بهتر است از این نوع دیتابیس در موارد زیر استفاده شود .
- Caching can be used in the same manner as memcached.
- Leaderboards or related problems.
- Counting stuff.
- Real time analysis.
- Deletion and filtering.
- Show latest item listings in your home page.
در واقع بهتر است به عنوان عملیاتهای جانبی که نیاز است سرعت بالایی داشته باشد استفاده نماییم همانند session ها که اطلاعات ورود افراد را نگه می دارد .
نصب ردیس
جهت نصب ردیس در لینوکس از دستور زیر استفاده می کنیم :
sudo apt-get install tcl
برای نصب در ویندوز کافی است از لینک زیر بسته نصب کننده را دانلود و نصب نمایید :
کار با ردیس در php
به منظور استفاده ردیس در پی اچ پی کافی است که با استفاده از کد زیر لایبرری predis را در محیط کاری خود اجار نمایید :
$ git clone git://github.com/nrk/predis.git
جهت اتصال به ردیس در پی اچ پی از دستورات زیر استفاده می کنیم :
<?php
require "predis/autoload.php";
PredisAutoloader::register();
try {
$redis = new PredisClient();
// This connection is for a remote server
/*
$redis = new PredisClient(array(
"scheme" => "tcp",
"host" => "153.202.124.2",
"port" => 6379
));
*/
}
catch (Exception $e) {
die($e->getMessage());
}
نوع های داده ای در ردیس
در ردیس نوع های داده ای مختلف وجود دارد که جهت بهره برداری سریع تر استفاده می شود در واقع شما وقتی از این داده های به موقع استفاده نمایید این سرعت ورود و خروج داده ای بالاتری خواهید داشت .
- String: نوع دادهای متن همانند رشته ها در پی اچ پی .
- List: همانگونه که در اسم آن پیدا می باشد همانند یک آرایه در پی اچ پی می باشد.
- Set:همانند لیست ها و آرایه ها می باشد ولی ترتیب ندارد.
- Sorted Set: همانند ئort می باشد ولی دارای ترتیب می باشد.
Getter وSetter
از این دستورات جهت نوشتن و خواندن اطلاعات در در ردیس استفاده می شود
<?php
// sets message to contian "Hello world"
$redis->set(';message';, ';Hello world';);
// gets the value of message
$value = $redis->get('message');
// Hello world
print($value);
echo ($redis->exists('message')) ? "Oui" : "please populate the message key";
increment وdecrement
از این دو دستور جهت افزایش یا کاهش یک مقدار استفاده می شود :
<?php
$redis->set("counter", 0);
$redis->incr("counter"); // 1
$redis->incr("counter"); // 2
$redis->decr("counter"); // 1
کار با لیستها در ردیس
با استفاده از متدهای زیر می توانید با لیستها در ردیس کار کنید
<?php
$redis->rpush("languages", "french"); // [french]
$redis->rpush("languages", "arabic"); // [french, arabic]
$redis->lpush("languages", "english"); // [english, french, arabic]
$redis->lpush("languages", "swedish"); // [swedish, english, french, arabic]
$redis->lpop("languages"); // [english, french, arabic]
$redis->rpop("languages"); // [english, french]
$redis->llen("languages"); // 2
$redis->lrange("languages", 0, -1); // returns all elements
$redis->lrange("languages", 0, 1); // [english, french]
کار با hash
هش ها یک سازنده ارتباط بین یک نوشته و یک مقدار می باشد مثل رابطه های چن به چند به مثال زیر توجه نمایید :
<?php
$key = ';linus torvalds';;
$redis->hset($key, ';age';, 44);
$redis->hset($key, ';country';, ';finland';);
$redis->hset($key, 'occupation', 'software engineer');
$redis->hset($key, 'reknown', 'linux kernel');
$redis->hset($key, 'to delete', 'i will be deleted');
$redis->get($key, 'age'); // 44
$redis->get($key, 'country')); // Finland
$redis->del($key, 'to delete');
$redis->hincrby($key, 'age', 20); // 64
$redis->hmset($key, [
'age' => 44,
'country' => 'finland',
'occupation' => 'software engineer',
'reknown' => 'linux kernel',
]);
// finally
$data = $redis->hgetall($key);
print_r($data); // returns all key-value that belongs to the hash
/*
[
'age' => 44,
'country' => 'finland',
'occupation' => 'software engineer',
'reknown' => 'linux kernel',
]
*/
کار با set ها
ست ها در ردیس بسیار حرفه ای و پیشرفته می باشد این ست ها در مثال زیر به صورت کامل توضیح داده شده است .
<?php
$key = "countries";
$redis->sadd($key, ';china';);
$redis->sadd($key, ['england', 'france', 'germany']);
$redis->sadd($key, 'china'); // this entry is ignored
$redis->srem($key, ['england', 'china']);
$redis->sismember($key, 'england'); // false
$redis->smembers($key); // ['france', 'germany']
استفاده از ردیس به عنوان session handler
به منظور استفاده از ردیس به عنوان session handler کافی است این تنظیم را در php انجام دهید :
session.save_handler = redis