workerman-redis
পরিচিতি
workeman/redis workerman ভিত্তিক একটি অ্যাসিঙ্ক্রনাস redis কম্পোনেন্ট।
মনে রাখবেন
এই প্রকল্পের মূল উদ্দেশ্য হল redis অ্যাসিঙ্ক্রনাস সাবস্ক্রিপশন (subscribe, pSubscribe) বাস্তবায়ন করা।
যেহেতু redis যথেষ্ট দ্রুত, তাই psubscribe এবং subscribe অ্যাসিঙ্ক্রনাস সাবস্ক্রিপশনের প্রয়োজন না হলে এই অ্যাসিঙ্ক্রনাস ক্লায়েন্ট ব্যবহার করার দরকার নেই, redis এক্সটেনশন ব্যবহার করা হবে আরও ভাল পারফরম্যান্স।
ইনস্টলেশন:
composer require workerman/redis ^v2.0.3
কলব্যাক ব্যবহার
use Workerman\Worker;
use Workerman\Redis\Client;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:6161');
$worker->onWorkerStart = function() {
global $redis;
$redis = new Client('redis://127.0.0.1:6379');
};
$worker->onMessage = function(TcpConnection $connection, $data) {
global $redis;
$redis->set('key', 'hello world');
$redis->get('key', function ($result) use ($connection) {
$connection->send($result);
});
};
Worker::runAll();
কোরটাইন ব্যবহার
মনে রাখবেন
কোরটাইন ব্যবহারের জন্য workerman>=5.0, workerman/redis>=2.0.0 ও composer require revolt/event-loop ^1.0.0 ইনস্টল করা প্রয়োজন।
use Workerman\Worker;
use Workerman\Redis\Client;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('http://0.0.0.0:6161');
$worker->onWorkerStart = function() {
global $redis;
$redis = new Client('redis://127.0.0.1:6379');
};
$worker->onMessage = function(TcpConnection $connection, $data) {
global $redis;
$redis->set('key', 'hello world');
$result = $redis->get('key');
$connection->send($result);
};
Worker::runAll();
যখন কলব্যাক ফাংশন সেট করা হয় না, ক্লায়েন্টটি সিঙ্ক্রোনাস পদ্ধতিতে অ্যাসিঙ্ক্রনাস অনুরোধের ফলাফল ফেরত দেয়, অনুরোধের প্রক্রিয়া বর্তমান প্রক্রিয়াকে ব্লক করে না, অর্থাৎ এটি একটি সঙ্গে অনুরোধ প্রক্রিয়া করতে পারে।
মনে রাখবেন
psubscribe subscribe কোরটাইন ব্যবহারের জন্য সমর্থিত নয়।
ডকুমেন্টেশন
ব্যাখ্যা
কলব্যাক পদ্ধতিতে, কলব্যাক ফাংশনে সাধারণত 2টি প্যারামিটার থাকে ($result, $redis), $result হল ফলাফল, এবং $redis হল redis উদাহরণ। উদাহরণস্বরূপ:
use Workerman\Redis\Client;
$redis = new Client('redis://127.0.0.1:6379');
// কলব্যাক ফাংশন সেট করা হয়েছে set কলের ফলাফল যাচাই করার জন্য
$redis->set('key', 'value', function ($result, $redis) {
var_dump($result); // true
});
// কলব্যাক ফাংশন ঐচ্ছিক প্যারামিটার, এখানে কলব্যাক ফাংশন বাদ দেয়া হয়েছে
$redis->set('key1', 'value1');
// কলব্যাক ফাংশনগুলি নেস্ট করা যাবে
$redis->get('key', function ($result, $redis){
$redis->set('key2', 'value2', function ($result) {
var_dump($result);
});
});
সংযোগ
use Workerman\Redis\Client;
// কলব্যাক বাদ দিন
$redis = new Client('redis://127.0.0.1:6379');
// কলব্যাক সহ
$redis = new Client('redis://127.0.0.1:6379', [
'connect_timeout' => 10 // 10 সেকেন্ডের জন্য সংযোগ টাইমআউট সেট করুন, না হলে ডিফল্ট 5 সেকেন্ড
], function ($success, $redis) {
// সংযোগ ফলাফল কলব্যাক
if (!$success) echo $redis->error();
});
auth
// পাসওয়ার্ড যাচাইকরণ
$redis->auth('password', function ($result) {
});
// ইউজারনেম পাসওয়ার্ড যাচাইকরণ
$redis->auth('username', 'password', function ($result) {
});
pSubscribe
একটি বা একাধিক দেওয়া প্যাটার্নের চ্যানেলের জন্য সাবস্ক্রাইব করা।
প্রতি প্যাটার্ন একটি দিয়ে মেলানো হয়, উদাহরণস্বরূপ it সমস্ত চ্যানেল মেলাবে যা it এ শুরু হয় ( it.news, it.blog, it.tweets ইত্যাদি)। news.* সমস্ত চ্যানেল মেলাবে যা news. এ শুরু হয় ( news.it, news.global.today ইত্যাদি), এভাবে।
মনে রাখবেন: pSubscribe কলব্যাক ফাংশনে 4টি প্যারামিটার ($pattern, $channel, $message, $redis)
যখন $redis উদাহরণ pSubscribe বা subscribe ইন্টারফেস কল করে, তখন বর্তমান উদাহরণে অন্যান্য পদ্ধতি কল করা উপেক্ষা করা হবে।
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->psubscribe(['news*', 'blog*'], function ($pattern, $channel, $message) {
echo "$pattern, $channel, $message"; // news*, news.add, news content
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news.add', 'news content');
});
subscribe
নির্দিষ্ট একটি বা একাধিক চ্যানেলের তথ্যের জন্য সাবস্ক্রাইব করতে ব্যবহৃত হয়।
মনে রাখবেন: subscribe কলব্যাক ফাংশনে 3টি প্যারামিটার ($channel, $message, $redis)
যখন $redis উদাহরণ pSubscribe বা subscribe ইন্টারফেস কল করে, তখন বর্তমান উদাহরণে অন্যান্য পদ্ধতি কল করা উপেক্ষা করা হবে।
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->subscribe(['news', 'blog'], function ($channel, $message) {
echo "$channel, $message"; // news, news content
});
Timer::add(5, function () use ($redis2){
$redis2->publish('news', 'news content');
});
publish
তথ্য নির্দিষ্ট চ্যানেলে পাঠানোর জন্য ব্যবহৃত হয়।
প্রাপ্ত তথ্যের সাবস্ক্রাইবার সংখ্যা ফেরত দেয়।
$redis2->publish('news', 'news content');
select
// কলব্যাক বাদ দিন
$redis->select(2);
$redis->select('test', function ($result, $redis) {
// select প্যারামিটার অবশ্যই সংখ্যা হতে হবে, তাই এখানে $result ফালস
var_dump($result, $redis->error());
});
get
নির্দিষ্ট key এর মান পাওয়ার জন্য কমান্ড। যদি key না থাকে, তহলে NULL ফেরত দেয়। যদি key সংরক্ষিত মানটি স্ট্রিং টাইপের না হয়, তহলে false ফেরত দেয়।
$redis->get('key', function($result) {
// যদি key না থাকে তহলে NULL ফেরত দেয়, ত্রুটি ঘটলে false ফেরত দেয়
var_dump($result);
});
set
নির্দেশিত key এর মান সেট করার জন্য ব্যবহৃত হয়। যদি key ইতিমধ্যে অন্য মান সংরক্ষণ করে, SET পুরনো মানকে ওভাররাইট করে, এবং টাইপকে উপেক্ষা করা হয়।
$redis->set('key', 'value');
$redis->set('key', 'value', function($result){});
// তৃতীয় প্যারামিটার দিয়ে মেয়াদ শেষের সময় দেওয়া যেতে পারে, 10 সেকেন্ড পরে মেয়াদ শেষ হবে
$redis->set('key','value', 10);
$redis->set('key','value', 10, function($result){});
setEx, pSetEx
নির্দিষ্ট key এর জন্য মান এবং এর মেয়াদ শেষের সময় সেট করে। যদি key ইতিমধ্যে বিদ্যমান থাকে, SETEX কমান্ড পুরনো মান প্রতিস্থাপন করবে।
// মনে রাখবেন দ্বিতীয় প্যারামিটার মেয়াদ শেষের সময় দেওয়া হচ্ছে, ইউনিট সেকেন্ড
$redis->setEx('key', 3600, 'value');
// pSetEx ইউনিট মিলিসেকেন্ডে
$redis->pSetEx('key', 3600, 'value');
del
বিদ্যমান কী মুছে ফেলার জন্য ব্যবহৃত হয়, ফলাফলটি সংখ্যা হিসেবে ফেরত দেয়, যা নির্দেশ করে কতগুলি কীগুলি মুছে ফেলা হয়েছে (অবিদ্যমান কীগুলির জন্য কাউন্টিং দেওয়া হবে না)।
// একটি key মুছে ফেলুন
$redis->del('key');
// একাধিক key মুছে ফেলুন
$redis->del(['key', 'key1', 'key2']);
setNx
(SETifNot eXists) কমান্ড নির্দিষ্ট key বিদ্যমান না হলে, key এর জন্য নির্দিষ্ট মান সেট করে।
$redis->del('key');
$redis->setNx('key', 'value', function($result){
var_dump($result); // 1
});
$redis->setNx('key', 'value', function($result){
var_dump($result); // 0
});
exists
কমান্ডটি যাচাই করার জন্য ব্যবহৃত হয় যে নির্দিষ্ট key বিদ্যমান কিনা। ফলাফল নম্বর, যেটি দেখায় যে কয়টি key বিদ্যমান।
$redis->set('key', 'value');
$redis->exists('key', function ($result) {
var_dump($result); // 1
});
$redis->exists('NonExistingKey', function ($result) {
var_dump($result); // 0
});
$redis->mset(['foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz']);
$redis->exists(['foo', 'bar', 'baz'], function ($result) {
var_dump($result); // 3
});
incr, incrBy
key মধ্যে সংরক্ষিত সংখ্যার মান বাড়ানোর জন্য। যদি key বিদ্যমান না থাকে, তবে key এর মান প্রথমে 0 এ ইনিশিয়ালাইজ করা হয়, তারপর incr/incrBy অপারেশন পরিচালিত হয়।
যদি মানে ত্রুটি টাইপ থাকে, বা স্ট্রিং টাইপের মান সংখ্যার প্রতিনিধিত্ব করতে সক্ষম না হয়, তাহলে false ফেরত দেয়।
সফল হলে ফেরত আসে বাড়ানো পরিমাণ।
$redis->incr('key1', function ($result) {
var_dump($result);
});
$redis->incrBy('key1', 10, function ($result) {
var_dump($result);
});
incrByFloat
key মধ্যে সংরক্ষিত মানের উপর নির্দিষ্ট ভাসমান সংখ্যা বৃদ্ধি করতে ব্যবহৃত হয়।
যদি key বিদ্যমান না থাকে, তাহলে INCRBYFLOAT প্রথমে key এর মান 0 হিসাবে সেট করবে, তারপর যোগফল অপারেশন সম্পন্ন হবে।
যদি মানে ত্রুটি টাইপ থাকে, বা স্ট্রিং টাইপের মান সংখ্যার প্রতিনিধিত্ব করতে সক্ষম না হয়, তাহলে false ফেরত দেয়।
সফল হলে ফেরত আসে বাড়ানো পরিমাণ।
$redis->incrByFloat('key1', 1.5, function ($result) {
var_dump($result);
});
decr, decrBy
কমান্ডটি key সংরক্ষিত মান কমানোর জন্য ব্যবহৃত হয় একটি/নির্দিষ্ট পরিমাণ।
যদি key বিদ্যমান না থাকে, তাহলে key এর মান প্রথমে 0 এ ইনিশিয়ালাইজ করা হয়, তারপর decr/decrBy অপারেশন পরিচালিত হয়।
যদি মানে ত্রুটি টাইপ থাকে, বা স্ট্রিং টাইপের মান সংখ্যার প্রতিনিধিত্ব করতে সক্ষম না হয়, তাহলে false ফেরত দেয়।
সফল হলে ফেরত আসে কমানো পরিমাণ।
$redis->decr('key1', function ($result) {
var_dump($result);
});
$redis->decrBy('key1', 10, function ($result) {
var_dump($result);
});
mGet
ফেরত দেয় সমস্ত (এক বা একাধিক) দেওয়া key এর মান। যদি দেওয়া key এর মধ্যে, কোনো একটি key বিদ্যমান না থাকে, তাহলে সেই key NULL ফেরত দেয়।
$redis->set('key1', 'value1');
$redis->set('key2', 'value2');
$redis->set('key3', 'value3');
$redis->mGet(['key0', 'key1', 'key5'], function ($result) {
var_dump($result); // [null, 'value1', null];
});
getSet
নির্দিষ্ট key এর মান সেট করতে এবং key এর পুরাতন value ফেরত দিতে ব্যবহৃত হয়।
$redis->set('x', '42');
$redis->getSet('x', 'lol', function ($result) {
var_dump($result); // '42'
}) ;
$redis->get('x', function ($result) {
var_dump($result); // 'lol'
}) ;
randomKey
বর্তমান ডাটাবেস থেকে একটি key র্যান্ডমভাবে ফেরত দেয়।
$redis->randomKey(function($key) use ($redis) {
$redis->get($key, function ($result) {
var_dump($result);
}) ;
})
move
বর্তমানে ডাটাবেসের key টি দেওয়া ডাটাবেস db এর মধ্যে স্থানান্তর করে।
$redis->select(0); // DB 0 তে যান
$redis->set('x', '42'); // x এ 42 লিখুন
$redis->move('x', 1, function ($result) { // DB 1 এ স্থানান্তর
var_dump($result); // 1
}) ;
$redis->select(1); // DB 1 এ যান
$redis->get('x', function ($result) {
var_dump($result); // '42'
}) ;
rename
key এর নাম পরিবর্তন করে, key বিদ্যমান না হলে false ফেরত দেয়।
$redis->set('x', '42');
$redis->rename('x', 'y', function ($result) {
var_dump($result); // true
}) ;
renameNx
নতুন key বিদ্যমান না হলে key এর নাম পরিবর্তন করে।
$redis->del('y');
$redis->set('x', '42');
$redis->renameNx('x', 'y', function ($result) {
var_dump($result); // 1
}) ;
expire
key এর মেয়াদ শেষের সময় সেট করে, key সময় শেষ হলে আর ব্যবহৃত হবে না। ইউনিট সেকেন্ডে। সফল হলে 1 ফেরত দেয়, key বিদ্যমান না হলে 0 ফেরত দেয়, ত্রুটি হলে false ফেরত দেয়।
$redis->set('x', '42');
$redis->expire('x', 3);
keys
কমান্ড এটি ব্যবহার করে সমস্ত key খুঁজে বের করতে যা নির্দিষ্ট প্যাটার্ন pattern এর সাথে মেলে।
$redis->keys('*', function ($keys) {
var_dump($keys);
}) ;
$redis->keys('user*', function ($keys) {
var_dump($keys);
}) ;
type
ফেরত দেয় যে key অনুসন্ধানের ফলস্বরূপ ভ্যালুর টাইপ। ফেরত ফলাফল একটি স্ট্রিং, যা হতে পারে string set list zset hash none, যেখানে none নির্দেশ করে যে key বিদ্যমান নয়।
$redis->type('key', function ($result) {
var_dump($result); // string set list zset hash none
}) ;
append
যদি key ইতিমধ্যে বিদ্যমান এবং এটি একটি স্ট্রিং হয়, APPEND কমান্ডটি value কে key এর মূল মানের শেষে যোগ করে এবং স্ট্রিং দৈর্ঘ্য ফেরত দেয়।
যদি key বিদ্যমান না থাকে, APPEND সহজভাবে প্রদত্ত key কে value হিসাবে সেট করে, যেমন সেট key value হিসেবে কাজ করে, এবং স্ট্রিং দৈর্ঘ্য ফেরত দেয়।
যদি key বিদ্যমান কিন্তু এটি একটি স্ট্রিং নয়, তাহলে false ফেরত দেয়।
$redis->set('key', 'value1');
$redis->append('key', 'value2', function ($result) {
var_dump($result); // 12
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'value1value2'
}) ;
getRange
নির্দিষ্ট key এর মধ্যে স্ট্রিংয়ের সাবস্ট্রিং পাওয়ার জন্য ব্যবহৃত হয়। স্ট্রিংয়ের কাটার সীমারেখা start এবং end দুটি অফসেট দ্বারা নির্ধারিত হয় (start এবং end উভয়ই অন্তর্ভুক্ত)। যদি key বিদ্যমান না থাকে, তাহলে খালি স্ট্রিং ফেরত দেয়। যদি key স্ট্রিং টাইপের না হয়, তহলে false ফেরত দেয়।
$redis->set('key', 'string value');
$redis->getRange('key', 0, 5, function ($result) {
var_dump($result); // 'string'
}) ;
$redis->getRange('key', -5, -1 , function ($result) {
var_dump($result); // 'value'
}) ;
setRange
নির্দিষ্ট স্ট্রিং দিয়ে নির্দিষ্ট key এর সংরক্ষিত স্ট্রিং মান পরিবর্তন করতে, পরিবর্তনের স্থান offset অফসেট থেকে শুরু হয়। যদি key বিদ্যমান না থাকে, তবে key কে নির্দিষ্ট স্ট্রিং হিসেবে সেট করে। যদি key স্ট্রিং টাইপের না হয়, তবে false ফেরত দেয়।
ফেরত ফলাফল হল পরিবর্তিত স্ট্রিংয়ের দৈর্ঘ্য।
$redis->set('key', 'Hello world');
$redis->setRange('key', 6, "redis", function ($result) {
var_dump($result); // 11
}) ;
$redis->get('key', function ($result) {
var_dump($result); // 'Hello redis'
}) ;
strLen
নির্দিষ্ট key দ্বারা সংরক্ষিত স্ট্রিং মানের দৈর্ঘ্য পাওয়ার জন্য ব্যবহৃত হয়। যখন key স্ট্রিং মান নয়, তহলে false ফেরত দেয়।
$redis->set('key', 'value');
$redis->strlen('key', function ($result) {
var_dump($result); // 5
}) ;
getBit
কী দ্বারা সংরক্ষিত স্ট্রিং মানের জন্য স্থির অফসেটের উপরে বিট(bit) পাওয়ার জন্য ব্যবহৃত হয়।
$redis->set('key', "\x7f"); // এটি 0111 1111
$redis->getBit('key', 0, function ($result) {
var_dump($result); // 0
}) ;
setBit
কী দ্বারা সংরক্ষিত স্ট্রিং মানের জন্য একটি সেট অথবা পরিষ্কার নির্দিষ্ট অফসেটের উপরে বিট(bit) সেট করতে ব্যবহৃত হয়।
ফিরে আসা মান হবে 0 বা 1, যে পরিবর্তন করার আগে আলাদা মানটি।
$redis->set('key', "*"); // ord("*") = 42 = 0x2f = "0010 1010"
$redis->setBit('key', 5, 1, function ($result) {
var_dump($result); // 0
}) ;
bitOp
একাধিক কীগুলোর মধ্যে বিট অপারেশন পরিচালনা করে এবং ফলাফলটি টার্গেট কীগুলিতে সংরক্ষণ করে।
BITOP কমান্ড চারটি বিট অপারেশন সমর্থন করে: AND, OR, XOR এবং NOT।
ফলাফলগুলি টার্গেট কীগুলিতে সংরক্ষিত স্ট্রিংয়ের আকার মাত্র, যা দীর্ঘতম ইনপুট স্ট্রিংয়ের আকারের সমান।
$redis->set('key1', "abc");
$redis->bitOp( 'AND', 'dst', 'key1', 'key2', function ($result) {
var_dump($result); // 3
}) ;
bitCount
স্ট্রিংয়ের মধ্যে সেট বিটের সংখ্যা গণনা করে (জনসংখ্যা গণনা)।
ডিফল্টরূপে, এটি স্ট্রিংয়ে অন্তর্ভুক্ত সমস্ত বাইট পরীক্ষা করে। কেবল অতিরিক্ত প্যারামিটার start এবং end পাস করে গণনা অপারেশন নির্দিষ্ট করতে পারবেন।
GETRANGE কমান্ডের মতো, শুরু এবং শেষ অন্তর্ভুক্ত হতে পারে নেগেটিভ, যাতে স্ট্রিংয়ের শেষ থেকে বাইট সূচক করতে পারে, যেখানে -1 হচ্ছে শেষ বাইট, -2 হচ্ছে দ্বিতীয় শেষ বাইট, ইত্যাদি।
ফলস্বরূপ স্ট্রিংয়ের মান 1 এর সংখ্যা ফেরত দেয়।
অবিদ্যমান কী খালি স্ট্রিং হিসেবে বিবেচিত হয়, তাই এই কমান্ড 0 ফেরত দেবে।
$redis->set('key', 'hello');
$redis->bitCount( 'key', 0, 0, function ($result) {
var_dump($result); // 3
}) ;
$redis->bitCount( 'key', function ($result) {
var_dump($result); //21
}) ;
sort
sort কমান্ডটি list, set এবং sorted set এর উপাদানগুলিকে সাজানোর জন্য ব্যবহার করা হয়।
প্রোটোটাইপ: sort($key, $options, $callback);
যেখানে options নিম্নলিখিত ঐচ্ছিক কী এবং মূল্যগুলি
$options = [
'by' => 'some_pattern_*',
'limit' => [0, 1],
'get' => 'some_other_pattern_*', // অথবা প্যাটার্নগুলির একটি অ্যারে
'sort' => 'asc', // অথবা 'desc'
'alpha' => true,
'store' => 'external-key'
];
$redis->del('s');
$redis->sAdd('s', 5);
$redis->sAdd('s', 4);
$redis->sAdd('s', 2);
$redis->sAdd('s', 1);
$redis->sAdd('s', 3);
$redis->sort('s', [], function ($result) {
var_dump($result); // 1,2,3,4,5
});
$redis->sort('s', ['sort' => 'desc'], function ($result) {
var_dump($result); // 5,4,3,2,1
});
$redis->sort('s', ['sort' => 'desc', 'store' => 'out'], function ($result) {
var_dump($result); // (int)5
});
ttl, pttl
সেকেন্ড/মিলিসেকেন্ডে key এর অবশিষ্ট মেয়াদ শেষ সময় ফেরত দেয়।
যদি key এর ttl না থাকে, তাহলে -1 ফেরত দেয়। যদি key বিদ্যমান না থাকে, তাহলে -2 ফেরত দেয়।
$redis->set('key', 'value', 10);
// সেকেন্ডে
$redis->ttl('key', function ($result) {
var_dump($result); // 10
});
// মিলিসেকেন্ডে
$redis->pttl('key', function ($result) {
var_dump($result); // 9999
});
// key বিদ্যমান নেই
$redis->pttl('key-not-exists', function ($result) {
var_dump($result); // -2
});
persist
নির্দিষ্ট key এর মেয়াদ শেষের সময় মুছে ফেলে, যাতে key কখনোই মেয়াদ শেষ না হয়।
যদি সফলভাবে মুছে ফেলা হয় তবে 1 ফেরত দেয়, যদি key বিদ্যমান না থাকে বা মেয়াদ শেষের সময় না থাকে তবে 0 ফেরত দেয়, ত্রুটি হলে false ফেরত দেয়।
$redis->persist('key');
mSet, mSetNx
একটি একক পারমাণবিক কমান্ডে একাধিক কীগুলোর জন্য কীগুলির মান সেট করা। mSetNx কেবল তখন 1 ফেরত দেয় যখন সমস্ত কীগুলি সেট করা হয়।
সফল হলে 1 ফেরত দেয়, ব্যর্থ হলে 0 ফেরত দেয়, ত্রুটি ঘটলে false ফেরত দেয়।
$redis->mSet(['key0' => 'value0', 'key1' => 'value1']);
hSet
হ্যাশ টেবিলের মধ্যে ক্ষেত্রের মান সেট করে।
যদি ক্ষেত্রটি হ্যাশ টেবিলের একটি নতুন ক্ষেত্র হয় এবং মূল্যটি সফলভাবে সেট হয় তবে 1 ফেরত দেয়। যদি হ্যাশ টেবিলে ক্ষেত্রের পুরাতন মান নতুন মান দ্বারা ওভাররাইট হয় তবে 0 ফেরত দেয়।
$redis->del('h');
$redis->hSet('h', 'key1', 'hello', function ($r) {
var_dump($r); // 1
});
$redis->hGet('h', 'key1', function ($r) {
var_dump($r); // hello
});
$redis->hSet('h', 'key1', 'plop', function ($r) {
var_dump($r); // 0
});
$redis->hGet('h', 'key1', function ($r) {
var_dump($r); // plop
});
hSetNx
হ্যাশ টেবিলে অস্তিত্বহীন ক্ষেত্রের মান সেট করতে ব্যবহৃত হয়।
যদি হ্যাশ টেবিল বিদ্যমান না থাকে, তবে একটি নতুন হ্যাশ টেবিল তৈরি করা হয় এবং HSET অপারেশন পরিচালিত হয়।
যদি ক্ষেত্রটি ইতিমধ্যে হ্যাশ টেবিলে বিদ্যমান থাকে, তবে অপারেশনটি অকার্যকর।
যদি key বিদ্যমান না থাকে, তবে একটি নতুন হ্যাশ টেবিল তৈরি করা হয় এবং HSETNX কমান্ড পরিচালিত হয়।
$redis->del('h');
$redis->hSetNx('h', 'key1', 'hello', function ($r) {
var_dump($r); // 1
});
$redis->hSetNx('h', 'key1', 'world', function ($r) {
var_dump($r); // 0
});
hGet
নির্দিষ্ট ক্ষেত্রের মান ফেরত দেয়।
যদি নির্দিষ্ট ক্ষেত্র বা key বিদ্যমান না থাকে, তাহলে null ফেরত দেয়।
$redis->hGet('h', 'key1', function ($result) {
var_dump($result);
});
hLen
হ্যাশ টেবিলে ক্ষেত্রের সংখ্যা পেতে ব্যবহৃত হয়।
যখন key বিদ্যমান না থাকে, তখন 0 ফেরত দেয়।
$redis->del('h');
$redis->hSet('h', 'key1', 'hello');
$redis->hSet('h', 'key2', 'plop');
$redis->hLen('h', function ($result) {
var_dump($result); // 2
});
hDel
কমান্ডটি একটি হ্যাশ টেবিল key থেকে একটি বা একাধিক নির্দিষ্ট ক্ষেত্র মুছে ফেলার জন্য ব্যবহৃত হয়, অস্থিতিশীল ক্ষেত্রগুলি উপেক্ষা করা হবে।
ফলস্বরূপ সফলভাবে মুছে ফেলা ক্ষেত্রের সংখ্যা ফেরত দেয়, উপেক্ষিত ক্ষেত্রগুলি বাদে। যদি key হ্যাশ না হয়, তবে false ফেরত দেয়।
$redis->hDel('h', 'key1');
hKeys
হ্যাশ টেবিলের সমস্ত ক্ষেত্রকে একটি অ্যারেতে ফেরত দেয়।
যদি key বিদ্যমান না থাকে তবে খালি অ্যারে ফেরত দেয়। যদি key হ্যাশ টাইপের না হয়, তবে false ফেরত দেয়।
$redis->hKeys('key', function ($result) {
var_dump($result);
});
hVals
হ্যাশ টেবিলের সমস্ত ক্ষেত্রের মান একটি অ্যারেতে ফেরত দেয়।
যদি key বিদ্যমান না থাকে তবে খালি অ্যারে ফেরত দেয়। যদি key হ্যাশ টাইপের না হয়, তবে false ফেরত দেয়।
$redis->hVals('key', function ($result) {
var_dump($result);
});
hGetAll
হ্যাশ টেবিলের সমস্ত ক্ষেত্র এবং মান একটি মানচিত্রেরভাবে ফেরত দেয়।
যদি key বিদ্যমান না থাকে, তবে খালি অ্যারে ফেরত দেয়। যদি key হ্যাশ প্রকারের হয় তবে false ফেরত দেয়।
$redis->del('h');
$redis->hSet('h', 'a', 'x');
$redis->hSet('h', 'b', 'y');
$redis->hSet('h', 'c', 'z');
$redis->hSet('h', 'd', 't');
$redis->hGetAll('h', function ($result) {
var_export($result);
});
ফলস্বরূপ
array (
'a' => 'x',
'b' => 'y',
'c' => 'z',
'd' => 't',
)
hExists
যাচাই করে যে হ্যাশ টেবিলের নির্দিষ্ট ক্ষেত্র বিদ্যমান কিনা। বিদ্যমান হলে 1 ফেরত দেয়, ক্ষেত্রটি বিদ্যমান না হলে বা key বিদ্যমান না হলে 0 ফেরত দেয়, ত্রুটি হলে false ফেরত দেয়।
$redis->hExists('h', 'a', function ($result) {
var_dump($result); //
});
hIncrBy
হ্যাশ টেবিলের মধ্যে ক্ষেত্রের মানের ওপর নির্দিষ্ট বৃদ্ধি মান যোগ করার জন্য ব্যবহৃত হয়।
বৃদ্ধি নেতিবাচকও হতে পারে, যা নির্দিষ্ট ক্ষেত্রের জন্য বিয়োগ অপারেশন হিসাবে গণ্য।
যদি হ্যাশ টেবিলের key বিদ্যমান না থাকে, তবে একটি নতুন হ্যাশ টেবিল তৈরি করা হয় এবং HINCRBY কমান্ড পরিচালিত হয়।
যদি নির্দিষ্ট ক্ষেত্র বিদ্যমান না থাকে, তবে কমান্ডের সম্পন্ন হওয়ার আগে ক্ষেত্রের মান 0 হিসাবে ইনিশিয়ালাইজ করা হয়।
একটি স্ট্রিং বাতাসে সংরক্ষিত ক্ষেত্রের জন্য HINCRBY কমান্ড চালালে false ফেরত দেয়।
এই অপারেশনের মান 64-বিট(bit) সাইনেড সংখ্যা প্রতিনিধিত্বের কাছে সীমাবদ্ধ।
$redis->del('h');
$redis->hIncrBy('h', 'x', 2, function ($result) {
var_dump($result);
});
hIncrByFloat
hIncrBy এর মতোই, কিন্তু বাড়ানোর মান ভাসমান সংখ্যা।
hMSet
একসাথে একাধিক ক্ষেত্র-মান জুড়ি হ্যাশ টেবিলে সেট করে।
এই কমান্ডটি ইতিমধ্যে বিদ্যমান ক্ষেত্রগুলির মান ওভাররাইট করবে।
যদি হ্যাশ টেবিলটি বিদ্যমান না থাকে, তবে একটি খালি হ্যাশ টেবিল তৈরি করা হয় এবং HMSET অপারেশন পরিচালিত হয়।
$redis->del('h');
$redis->hMSet('h', ['name' => 'Joe', 'sex' => 1])
hMGet
একটি অ্যাসোসিয়েটিভ অ্যারেতে হ্যাশ টেবিলের মধ্যে একটি বা একাধিক নির্দিষ্ট ক্ষেত্রের মান ফেরত দেয়।
যদি নির্দিষ্ট ক্ষেত্র হ্যাশ টেবিলে বিদ্যমান না থাকে, তাহলে সম্পর্কিত ক্ষেত্র null হবে। যদি key হ্যাশ না হয় তবে false ফেরত দেয়।
$redis->del('h');
$redis->hSet('h', 'field1', 'value1');
$redis->hSet('h', 'field2', 'value2');
$redis->hMGet('h', ['field1', 'field2', 'field3'], function ($r) {
var_export($r);
});
আউটপুট
array (
'field1' => 'value1',
'field2' => 'value2',
'field3' => null
)
blPop, brPop
তালিকার প্রথম উপাদান/শেষ উপাদান অপসারণ এবং গ্রহণ করুন, যদি তালিকাতে উপাদান না থাকে তবে তালিকাটি ব্লক করবে যতক্ষণ না অপেক্ষার সময়সীমা না ঘটে অথবা অপসারিত উপাদান পাওয়া না যায়।
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->blPop(['key1', 'key2'], 10, function ($r) {
var_export($r); // array ( 0 => 'key1',1 => 'a')
});
Timer::add(1, function () use ($redis2) {
$redis2->lpush('key1', 'a');
});
bRPopLPush
তালিকা থেকে শেষ উপাদানটি অপসারণ করুন এবং অন্য একটি তালিকার শীর্ষে সন্নিবেশ করুন; যদি তালিকায় কোনও উপাদান না থাকে তবে তালিকাটি ব্লক করবে যতক্ষণ অপেক্ষার সময়সীমা না ঘটে বা অপসারিত উপাদান পাওয়া না যায়। যদি সময় শেষ হয়ে যায়, তাহলে null ফেরত দেয়।
$redis = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis->del(['key1', 'key2']);
$redis->bRPopLPush('key1', 'key2', 2, function ($r) {
var_export($r);
});
Timer::add(2, function () use ($redis2) {
$redis2->lpush('key1', 'a');
$redis2->lRange('key2', 0, -1, function ($r) {
var_dump($r);
});
}, null, false);
lIndex
সূচক দ্বারা তালিকার উপাদানটি পাওয়া যায়। আপনি নেতিবাচক সূচক ব্যবহার করতে পারেন, যেখানে -1 তালিকার শেষ উপাদান নির্দেশ করে, -2 তালিকার দ্বিতীয় শেষ উপাদান নির্দেশ করে, এবং এভাবে।
যদি নির্দিষ্ট সূচক মানটি তালিকার সীমার মধ্যে না থাকে, তবে null ফেরত দেয়। যদি সংশ্লিষ্ট key তালিকা টাইপ না হয়, তবে false ফেরত দেয়।
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lindex('key1', 0, function ($r) {
var_dump($r); // A
});
lInsert
তালিকার উপাদানের আগে বা পরে উপাদান সন্নিবেশ করতে ব্যবহৃত হয়। যখন নির্দিষ্ট উপাদান তালিকায় বিদ্যমান নয়, তখন কোনও অপারেশন সম্পন্ন হয় না।
যখন তালিকা বিদ্যমান নয়, তখন এটিকে খালি তালিকা হিসেবে গণ্য করা হয়, কোনও অপারেশন সম্পন্ন হয় না।
যদি key তালিকা টাইপ না হয়, তবে false ফেরত দেয়।
$redis->del('key1');
$redis->lInsert('key1', 'after', 'A', 'X', function ($r) {
var_dump($r); // 0
});
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');
$redis->lInsert('key1', 'before', 'C', 'X', function ($r) {
var_dump($r); // 4
});
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B', 'X', 'C']
});
lPop
তালিকার প্রথম উপাদান অপসারণ এবং ফেরত দেয়।
যখন তালিকা key বিদ্যমান না থাকে, তখন null ফেরত দেয়।
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->lPop('key1', function ($r) {
var_dump($r); // A
});
lPush
এক বা একাধিক মানকে তালিকার শীর্ষে সন্নিবেশ করা। যদি key বিদ্যমান না থাকে, একটি খালি তালিকা তৈরি করা হয় এবং LPUSH অপারেশন পরিচালিত হয়। যখন key বিদ্যমান থাকে কিন্তু তালিকা টাইপ অনুযায়ী না থাকে, তখন false ফেরত দেয়।
মনে রাখবেন: Redis 2.4 সংস্করণের আগে LPUSH কমান্ড কেবল একটি ভ্যালু গ্রহণ করেছিল।
$redis->del('key1');
$redis->lPush('key1', 'A');
$redis->lPush('key1', ['B','C']);
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lPushx
একটি মান ইতিমধ্যে বিদ্যমান তালিকার শীর্ষে সন্নিবেশ করতে ব্যবহৃত হয়, তালিকা বিদ্যমান না থাকলে অপারেশন অকার্যকর, 0 ফেরত দেয়। যদি key তালিকা টাইপ না হয়, তবে false ফেরত দেয়।
ফিরে আসা মান হল lPushx কমান্ড সম্পন্ন হওয়ার পর তালিকার দৈর্ঘ্য।
$redis->del('key1');
$redis->lPush('key1', 'A');
$redis->lPushx('key1', ['B','C'], function ($r) {
var_dump($r); // 3
});
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lRange
নির্দিষ্ট সীমার মধ্যে তালিকার উপাদান ফেরত দেয়, সীমা START এবং END দ্বারা নির্ধারিত হয়। যেখানে 0 তালিকার প্রথম উপাদান নির্দেশ করে, 1 দ্বিতীয় উপাদান নির্দেশ করে, ইত্যাদি। আপনি নেতিবাচক সূচকগুলোও ব্যবহার করতে পারেন, যেখানে -1 তালিকার শেষ উপাদান নির্দেশ করে, -2 তালিকার দ্বিতীয় শেষ উপাদান নির্দেশ করে, ইত্যাদি।
ফলস্বরূপ একটি অ্যারে প্রদান করে যা নির্দিষ্ট সীমার মধ্যে উপাদানগুলিকে ধারণ করে। যদি key তালিকা টাইপ না হয়, তবে false ফেরত দেয়।
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['C', 'B', 'A']
});
lRem
প্যারামিটার COUNT এর মূল্য অনুযায়ী, তালিকার মধ্যে VALUE সমান উপাদান অপসারণ।
COUNTএর মান নিচে বিভিন্ন প্রকারের থাকতে পারে:
- count > 0 : টেবিলের শীর্ষ থেকে পিছন দিকে সন্ধান করে, VALUE সমান উপাদান অপসারণ করে, সংখ্যা COUNT।
- count < 0 : টেবিলের শেষ থেকে শীর্ষ দিকে সন্ধান করে, VALUE সমান উপাদান অপসারণ করে, সংখ্যা COUNT এর আবশ্যক।
- count = 0 : টেবিলের সমস্ত VALUE সমান মান অপসারণ করে।
অপসারিত উপাদানের সংখ্যা ফেরত দেয়। তালিকা বিদ্যমান না থাকলে ফেরত দেয় 0। তালিকার ব্যতীত অন্য টাইপ ফিরিয়ে দেয় false।
$redis->lRem('key1', 2, 'A', function ($r) {
var_dump($r);
});
lSet
সূচক দ্বারা উপাদানের মূল্য সেট করতে ব্যবহৃত হয়।
সফল হলে true ফেরত দেয়, সূচক প্যারামিটার পরিসরের বাইরে থাকলে, অথবা একটি খালি তালিকার LSET করা হলে false ফেরত দেয়।
$redis->lSet('key1', 0, 'X');
lTrim
একটি তালিকার উপর ট্রিমিং (trim) পরিচালনা করে, মানেই হচ্ছে, তালিকাকে কেবল নির্দিষ্ট সীমার মধ্যে উপাদান রাখতে দেয়, নির্দিষ্ট পরিসরের বাহিরের সমস্ত উপাদান মুছে ফেলবে।
সূচক 0 হল তালিকার প্রথম উপাদান নির্দেশ করে, 1 হল দ্বিতীয় উপাদান নির্দেশ করে, ইত্যাদি। আপনি নেতিবাচক সূচকেরও ব্যবহার করতে পারেন, যেখানে -1 তালিকার শেষ উপাদান নির্দেশ করে, -2 তালিকার দ্বিতীয় শেষ উপাদান নির্দেশ করে, ইত্যাদি।
সফল হলে true ফেরত দেয়, ব্যর্থ হলে false ফেরত দেয়।
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B', 'C']
});
$redis->lTrim('key1', 0, 1);
$redis->lRange('key1', 0, -1, function ($r) {
var_dump($r); // ['A', 'B']
});
rPop
তালিকার শেষ উপাদান অপসারণ করার জন্য ব্যবহৃত হয়, ফিরতি মানটি অপসারিত উপাদান।
যখন তালিকা বিদ্যমান না থাকে, তখন null ফেরত দেয়।
$redis->rPop('key1', function ($r) {
var_dump($r);
});
rPopLPush
তালিকার শেষ উপাদান অপসারণ এবং সেই উপাদানটিকে অন্য তালিকায় যোগ করে ফেরত দেয়।
$redis->del('x', 'y');
$redis->lPush('x', 'abc');
$redis->lPush('x', 'def');
$redis->lPush('y', '123');
$redis->lPush('y', '456');
$redis->rPopLPush('x', 'y', function ($r) {
var_dump($r); // abc
});
$redis->lRange('x', 0, -1, function ($r) {
var_dump($r); // ['def']
});
$redis->lRange('y', 0, -1, function ($r) {
var_dump($r); // ['abc', '456', '123']
});
rPush
এক বা একাধিক মানকে তালিকার শেষে (অতি ডানে) সন্নিবেশ করা, এবং সন্নিবেশ করার পরে তালিকার দৈর্ঘ্য ফেরত দেয়।
যদি তালিকা বিদ্যমান না থাকে, একটি খালি তালিকা তৈরি করা হয় এবং RPUSH অপারেশন পরিচালিত হয়। যখন তালিকা বিদ্যমান কিন্তু তালিকা টাইপ অনুযায়ী না থাকে, তখন false ফেরত দেয়।
মনে রাখবেন: Redis 2.4 সংস্করণের আগে RPUSH কমান্ড কেবল একটি ভ্যালু গ্রহণ করেছিল।
$redis->del('key1');
$redis->rPush('key1', 'A', function ($r) {
var_dump($r); // 1
});
rPushX
একটি মানকে ইতিমধ্যে বিদ্যমান তালিকার শেষে (অতি ডানে) যোগ করতে এবং তালিকার দৈর্ঘ্য ফেরত দিতে ব্যবহৃত হয়।
যদি তালিকা বিদ্যমান না থাকে, অপারেশন অকার্যকর, 0 ফেরত দেয়। যখন তালিকা বিদ্যমান থাকে কিন্তু তালিকা টাইপ অনুযায়ী না থাকে, তখন false ফেরত দেয়।
$redis->del('key1');
$redis->rPushX('key1', 'A', function ($r) {
var_dump($r); // 0
});
lLen
তালিকার দৈর্ঘ্য ফেরত দেয়। যদি তালিকা key বিদ্যমান না থাকে, তবে key খালি তালিকা হিসাবে বিবেচিত হয়, 0 ফেরত দেয়। যদি key তালিকা টাইপ না হয়, তবে false ফেরত দেয়।
$redis->del('key1');
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lLen('key1', function ($r) {
var_dump($r); // 3
});
sAdd
এক বা একাধিক সদস্য উপাদানকে সেটের মধ্যে যোগ করে, যা ইতিমধ্যে সেটের সদস্য উপাদান হবে তা উপেক্ষা করে।
যদি সেট key বিদ্যমান না থাকে, তবে এটি শুধুমাত্র যোগ করা উপাদানগুলো নিয়ে একটি সেট তৈরি করবে।
যখন সেট key সেট টাইপের নয়, তখন false ফেরত দেয়।
মনে রাখবেন: Redis 2.4 সংস্করণের পূর্বে SADD কেবল একটি সদস্য মান গ্রহণ করেছিল।
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , ['member2', 'member3'], function ($r) {
var_dump($r); // 2
});
$redis->sAdd('key1' , 'member2', function ($r) {
var_dump($r); // 0
});
sCard
সেটের মধ্যে উপাদানের সংখ্যা ফেরত দেয়। যখন সেট key বিদ্যমান না থাকে, তখন 0 ফেরত দেয়।
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sCard('key1', function ($r) {
var_dump($r); // 3
});
$redis->sCard('keyX', function ($r) {
var_dump($r); // 0
});
sDiff
প্রথম সেট এবং অন্যান্য সেটের মধ্যে পার্থক্য ফেরত দেয়, যা বলা যায় প্রথম সেটের মধ্যে একক উপাদান রয়েছে।
অবিদ্যমান সেট key খালি সেট হিসাবে বিবেচিত হবে।
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s0', '3');
$redis->sAdd('s0', '4');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sDiff(['s0', 's1', 's2'], function ($r) {
var_dump($r); // ['2', '4']
});
sDiffStore
নির্দিষ্ট সেটের মধ্যে পার্থক্য নির্দিষ্ট সেটে সংরক্ষণ করে।
যদি নির্দিষ্ট সেট key ইতিমধ্যে বিদ্যমান থাকে তবে সেটটি ওভাররাইড করা হবে।
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s0', '3');
$redis->sAdd('s0', '4');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sDiffStore('dst', ['s0', 's1', 's2'], function ($r) {
var_dump($r); // 2
});
$redis->sMembers('dst', function ($r) {
var_dump($r); // ['2', '4']
});
sInter
প্রদানিত সকল সেটের মধ্যে ইন্টারসেকশন ফেরত দেয়।
অবিদ্যমান সেট key খালি সেট হিসাবে বিবেচিত হয়।
যখন প্রদত্ত সেটগুলির মধ্যে একটি খালি সেট থাকে, ফলাফলও খালি সেট।
$redis->del('s0', 's1', 's2');
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
$redis->sInter(['key1', 'key2', 'key3'], function ($r) {
var_dump($r); // ['val4', 'val3']
});
sInterStore
নির্দিষ্ট সেটের মধ্যে ইন্টারসেকশন সংরক্ষণ করে নির্দিষ্ট সেটে, এবং সংরক্ষিত ইন্টারসেকশনের সেটের উপাদান সংখ্যা ফেরত দেয়।
যদি নির্দিষ্ট সেট ইতিমধ্যে বিদ্যমান হয়, তবে এটি ওভাররাইট করা হবে।
$redis->sAdd('key1', 'val1');
$redis->sAdd('key1', 'val2');
$redis->sAdd('key1', 'val3');
$redis->sAdd('key1', 'val4');
$redis->sAdd('key2', 'val3');
$redis->sAdd('key2', 'val4');
$redis->sAdd('key3', 'val3');
$redis->sAdd('key3', 'val4');
$redis->sInterStore('output', 'key1', 'key2', 'key3', function ($r) {
var_dump($r); // 2
});
$redis->sMembers('output', function ($r) {
var_dump($r); // ['val4', 'val3']
});
sIsMember
যাচাই করে সদস্য উপাদানটি কি সেটের সদস্য কিনা।
যদি সদস্য উপাদান সেটের সদস্য হয় তবে 1 ফেরত দেয়।
যদি সদস্য উপাদান সেটের সদস্য না হয়, অথবা key বিদ্যমান না থাকে, তবে 0 ফেরত দেয়।
যদি key সেট টাইپের না হয় তবে false ফেরত দেয়।
$redis->sIsMember('key1', 'member1', function ($r) {
var_dump($r);
});
sMembers
সেটের মধ্যে সমস্ত সদস্য ফেরত দেয়।
অবিদ্যমান সেট key খালি সেট হিসাবে বিবেচিত হয়।
$redis->sMembers('s', function ($r) {
var_dump($r);
});
sMove
নির্দিষ্ট সদস্য member উপাদানকে উৎস সেট থেকে গন্তব্য সেটে স্থানান্তর করে।
SMOVE একাধিক অপারেশন।
যদি উৎস সেট বিদ্যমান না থাকে অথবা নির্দিষ্ট সদস্য উপাদান অন্তর্ভুক্ত না থাকে, তবে SMOVE কমান্ড কোনো অপারেশন পরিচালনা করে না, কেবল 0 ফেরত দেয়। অন্যথায়, সদস্য উপাদান উৎস সেট থেকে সরিয়ে ফেলা হয় এবং সেটিংসে যোগ করা হয়।
যখন গন্তব্য সেট ইতিমধ্যে সদস্য উপাদান অন্তর্ভুক্ত করে, SMOVE কমান্ডটি সহজভাবে সদস্য উপাদানকে উৎস সেট থেকে অপসারণ করে।
যখন উৎস বা গন্তব্য সেট টাইপের না থাকে, তখন false ফেরত দেয়।
$redis->sMove('key1', 'key2', 'member13');
sPop
সেট থেকে নির্দিষ্ট key এর এক বা একাধিক র্যান্ডম উপাদান অপসারণ করে, অপসারিত উপাদান ফেরত দেয়।
যখন সেট বিদ্যমান না থাকে অথবা খালি সেট থাকে, তখন null ফেরত দেয়।
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sPop('key1', function ($r) {
var_dump($r); // member3
});
$redis->sAdd('key2', ['member1', 'member2', 'member3']);
$redis->sPop('key2', 3, function ($r) {
var_dump($r); // ['member1', 'member2', 'member3']
});
sRandMember
Redis Srandmember কমান্ডটি সেটের মধ্যে একটি র্যান্ডম উপাদান ফেরত দেয়।
Redis 2.6 সংস্করণ থেকে, Srandmember কমান্ডটি ঐচ্ছিক গাণিতিক count প্যারামিটার গ্রহণ করে:
- যদি count ইতিবাচক সংখ্যা হয় এবং সেটের সংখ্যার চেয়ে কম হয়, তবে কমান্ডটি count সংখ্যক উপাদানের একটি অ্যারে ফেরত দেয়, যার মধ্যে উপাদানগুলি আলাদা। যদি count সেটের সংখ্যা থেকে বড় বা সমান হয়, তবে পুরো সেটটি ফেরত দেয়।
- যদি count নেতিবাচক হয়, তবে কমান্ডটি একটি অ্যারে ফেরত দেয়, যার মধ্যে উপাদান একাধিক বার পুনরাবৃত্তি হতে পারে, এবং অ্যারের দৈর্ঘ্য count এর আবশ্যক মান।
এই অপারেশনটি SPOP-এর মতো, কিন্তু SPOP সেট থেকে র্যান্ডম উপাদান অপসারণ করে এবং ফেরত দেয়, Srandmember কেবলমাত্র র্যান্ডম উপাদান ফেরত দেয়, সেটে কোনো পরিবর্তন হয় না।
$redis->del('key1');
$redis->sAdd('key1' , 'member1');
$redis->sAdd('key1' , 'member2');
$redis->sAdd('key1' , 'member3');
$redis->sRandMember('key1', function ($r) {
var_dump($r); // member1
});
$redis->sRandMember('key1', 2, function ($r) {
var_dump($r); // ['member1', 'member2']
});
$redis->sRandMember('key1', -100, function ($r) {
var_dump($r); // ['member1', 'member2', 'member3', 'member3', ...]
});
$redis->sRandMember('empty-set', 100, function ($r) {
var_dump($r); // []
});
$redis->sRandMember('not-a-set', 100, function ($r) {
var_dump($r); // []
});
sRem
সেটে এক বা একাধিক সদস্য উপাদান অপসারণ করে, অস্থিতিশীল সদস্য উপাদান বাইপাস করবে।
ফেরত দেয় সফলভাবে মুছে ফেলা উপাদানের সংখ্যা, উপেক্ষিত উপাদানগুলি বাদে।
যখন key সেট টাইপের নয়, তখন false ফেরত দেয়।
Redis 2.4 সংস্করণ পূর্বে SREM কেবল একটি সদস্য ভ্যালু গ্রহণ করেছিল।
$redis->sRem('key1', ['member2', 'member3'], function ($r) {
var_dump($r);
});
sUnion
কমান্ডটি প্রশেসনিত সেটের ইউনিয়ন ফেরত দেয়।
অবিদ্যমান সেট key খালি সেট হিসাবে বিবেচিত হয়।
$redis->sUnion(['s0', 's1', 's2'], function ($r) {
var_dump($r); // []
});
sUnionStore
নির্দিষ্ট সেটের ইউনিয়ন সংরক্ষণ করে নির্দিষ্ট সেট গন্তব্যের মধ্যে এবং গন্তব্যের সংখ্যা ফেরত দেয়।
যদি গন্তব্য ইতিমধ্যে বিদ্যমান থাকে তবে এটি ওভাররাইট হবে।
$redis->del('s0', 's1', 's2');
$redis->sAdd('s0', '1');
$redis->sAdd('s0', '2');
$redis->sAdd('s1', '3');
$redis->sAdd('s1', '1');
$redis->sAdd('s2', '3');
$redis->sAdd('s2', '4');
$redis->sUnionStore('dst', 's0', 's1', 's2', function ($r) {
var_dump($r); // 4
});
$redis->sMembers('dst', function ($r) {
var_dump($r); // ['1', '2', '3', '4']
});