PHP 對 Redis key 值的操作

bossaiguo發表於2019-01-28

1、DEL

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
// The first case 刪除單獨的 key
$redis->set('w3ckey','redis');
var_dump($redis->get('w3ckey'));     // 返回 redis
$redis ->del('w3ckey');              // 刪除該key,若需要獲取返回值,則返回值為 int(1)
var_dump($redis->get('w3ckey'));     // 返回 boolean(false)

// The second case 刪除一個不存在的 key
if(!$redis->exists('fake_key'))
{
    var_dump($redis->del('fake_key'));   // 返回 int();
}

// The third case 同時刪除多個 key
$array_mset = array(
  'key1' => 'val1',
  'key2' => 'val2',
  'key3' => 'val3',
);
$redis->mset($array_mset);           // 使用 mset 同時儲存多個值
$array_mget = array('key1', 'key2', 'key3');
var_dump($redis->mget($array_mget)); // 返回 array (size=3)0 => string 'val1' (length=4) 1 => string 'val2' (length=4) 2 => string 'val3' (length=4)
$redis -> del($array_mget);          // 同時刪除多個值
var_dump($redis->mget($array_mget)); // 返回 array (size=3) 0 => boolean false 1 => boolean false 2 => boolean false

2、EXISTS

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->set('w3ckey','redis');
var_dump($redis->exists('w3ckey'));   // boolean true
$redis ->del('w3ckey');
var_dump($redis->exists('w3ckey'));   // boolean(false)

3、EXPIRE

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->set('w3ckey','redis');
$redis->expire('w3ckey',20);      // 設定 w3ckey 的剩餘生存時間為 20s
sleep(2);
var_dump($redis->TTL('w3ckey'));  // 檢視給定 key 的剩餘生存時間,int 18
$redis->expire('w3ckey',30);      // 更新 w3ckey 的剩餘生存時間為 30s
sleep(3);
var_dump($redis->TTL('w3ckey'));  // int 27

4、EXPIREAT

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->set('w3ckey','redis');
$redis->expireAt('w3ckey',time()+10);      // 設定 w3ckey 的剩餘生存時間為 10s 後過期
sleep(3);
var_dump($redis->TTL('w3ckey'));           // 檢視給定 key 的剩餘生存時間,int 7

5、KEYS

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->flushAll();
$array_mset_keys = array(
    'one' => 1,
    'two' => 2,
    'three' => 3,
    'four' => 4,
);
$redis -> mset($array_mset_keys);
// KEYS * 命中資料庫中所有key。
var_dump($redis -> keys('*'));    // array (size=4) 0 => string 'four' (length=4) 1 => string 'two' (length=3) 2 => string 'three' (length=5) 3 => string 'one' (length=3)

// KEYS *o* 命中所有包含 "o" 的key。
var_dump($redis -> keys('*o*'));  // array (size=4) 0 => string 'four' (length=4) 1 => string 'two' (length=3) 2 => string 'one' (length=3)

// KEYS 0?? 命中 "o" 後面有幾個問號就命中幾位數。
var_dump($redis->keys("o??"));    //array (size=1) 0 => string 'one' (length=3)

// KEYS t[wh]* 命中 "t" 後面跟了 "w" , "h" 或者 "wh" 的key。
var_dump($redis->keys("t[wh]*")); //array (size=2) 0 => string 'two' (length=3) 1 => string 'three' (length=5)

6、MOVE

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->flushAll();

// This first case: key 存在於當前資料庫
$redis -> select(0);                            // redis 預設使用資料庫0,這裡在顯示指定一次
$redis -> set('favorite_fruit','pineapple');    // 確保 key 值存在
if($redis -> move('favorite_fruit',1)){         // 將 favorite_fruit 移動到資料庫 1 中, int 1
    $redis -> select(1);                        // 選擇資料庫 1
    var_dump($redis -> get('favorite_fruit'));  // string pineapple
}

// This second case: key 不存在
$redis -> select(0);
if(! $redis->exists('fake_key')){               // key 不存在
    $redis -> move('fake_key',1);               // 將 favorite_fruit 移動到資料庫 1 中, int 0
}
$redis -> select(1);
var_dump($redis->exists('fake_key'));           // boolean (false)

// This third case: 源資料庫和目標資料庫有相同的 key
$redis -> select(0);
$redis -> set('favorite_singer','Jay Chou');    // db0 和 db1 有相同的 key : favorite_singer
$redis -> select(1);
$redis -> set('favorite_singer','Xu Wei');
$redis -> select(0);
$redis -> move('favorite_singer',1);            // 將 favorite_fruit 移動到資料庫 1 中, int 0
echo $redis -> get('favorite_singer');          // db0 的值沒有發生改變,string Jay Chou
$redis -> select(1);
echo $redis -> get('favorite_singer');          // db1 的值沒有發生改變,string Xu Wei

7、PERSIST

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->flushAll();

// This first case: key 存在且設定了過期時間
$redis -> set('favorite_fruit','pineapple');
$redis -> expire('favorite_fruit',20);
sleep(2);
echo $redis -> ttl('favorite_fruit')."</br>";    // 18
$redis -> persist('favorite_fruit');             // 移除過期時間
echo $redis -> ttl('favorite_fruit');            // -1 ,表示成功移除過期時間

// This second case: key 不存在
$redis -> select(0);
if(! $redis->exists('fake_key')){               // key 不存在
    var_dump($redis -> persist('fake_key'));    // boolean false
}

// This third case: key 存在但是沒有設定過期時間
$redis -> select(0);
$redis -> set('favorite_singer','Jay Chou');
var_dump($redis -> persist('favorite_singer'));  // boolean false

8、TTL

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->flushAll();

// This first case: key 存在且設定了過期時間
$redis -> set('favorite_fruit','pineapple');
$redis -> expire('favorite_fruit',20);
sleep(2);
echo $redis -> ttl('favorite_fruit')."</br>";    // 18

// This second case: key 不存在
$redis -> select(0);
if(! $redis->exists('fake_key')){               // key 不存在
    var_dump($redis -> ttl('fake_key'));        // int -2
}

// This third case: key 存在但是沒有設定過期時間
$redis -> select(0);
$redis -> set('favorite_singer','Jay Chou');
var_dump($redis -> ttl('favorite_singer'));     // int -1

9、RENAME

<?php
$redis = new redis();
$redis->connect('127.0.0.1',6379);
$redis->flushAll();

// This first case: key 存在且 newkey 不存在 ,成功改名
$redis -> set('fruit','pineapple');
$redis -> rename('fruit','favorite_fruit');     // 重新命名
var_dump($redis -> exists('fruit'));            // boolean false, 原來的 key 已經不存在
var_dump($redis -> exists('favorite_fruit'));   // boolean true, key 變成了 newkey

// This second case: key 不存在 ,返回錯誤
$redis->flushAll();
if(! $redis ->exists('fake_key'))
{
    var_dump($redis -> rename('fake_key','never_exists'));  // boolean false
}

// This third case: key 和 newkey 相同 ,返回錯誤
$redis -> set('favorite_singer','Jay Chou');
var_dump($redis -> rename('favorite_singer','favorite_singer')); // boolean false

// This fourth case: newkey 已經存在, 覆蓋
$redis -> set('PC','SONY');
$redis -> set('personal_computer','lenovo');
var_dump($redis -> rename('PC','personal_computer'));       // boolean true
var_dump($redis -> get('personal_computer'));               // string SONY
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章