1. 程式人生 > 實用技巧 >redis 的 hash、set、list操作

redis 的 hash、set、list操作

/**
 *
 * Hash操作
 * 雜湊操作
 * 可理解為資料庫操作
 * 
 */

//為user表中的欄位賦值。成功返回1,失敗返回0。若user表不存在會先建立表再賦值,若欄位已存在會覆蓋舊值。
$redis->hSet('user', 'name', '222');

//獲取user表中指定欄位的值。若user表不存在則返回false。
$redis->hGet('user', 'realname');

//檢視user表的某個欄位是否存在,存在返回true,否則返回false。
$redis->hExists('user', 'realname');

//刪除user表的一個欄位,不支援刪除多個欄位。成功返回1,否則返回0。
$redis->hDel('user', '222');

//同時設定某個user表的多個欄位值。成功返回true。
$redis->hMset('user', ['name' => 'jet', 'age' => 18]);

//同時獲取某個user表的多個欄位值。其中不存在的欄位值為false。
$redis->hMget('user', ['name', 'age']);

//獲取某個user表所有的欄位和值。
$redis->hGetAll('user');

//獲取某個user表所有欄位名。user表不存在時返回空陣列,key不為user表時返回false。
$redis->hKeys('user');

//獲取某個user表所有欄位值。
$redis->hVals('user');

//為user表中不存在的欄位賦值。若user表不存在則先建立,若欄位已存在則不做任何操作。設定成功返回true,否則返回false。
$redis->hSetNx('user', 'realname', 'jetwu');

//獲取某個user表的欄位數量。若user表不存在返回0,若user不是hash表則返回false。
$redis->hLen('user');

//為user表中的指定欄位加上指定的數值,若user表不存在則先建立,若欄位不存在則先初始化值為0再進行操作,若欄位值為字串則返回false。設定成功返回欄位新值。
$redis->hIncrBy('user', 'age', 10);

//為user表中的指定欄位加上指定浮點數值。
$redis->hIncrBy('user', 'age', 1.5);


/**
    * 
    * List操作
    * 列表操作
    * 可理解為陣列操作
    * 插入、刪除資料按照一定規律排列的
    * 元素可重複
    * 適用於佇列
    * 
    */
   
   //在列表頭部插入一個值one,當列表不存在時自動建立一個列表,key1為列表名
     $redis->lpush("key1", "one");

   //在列表尾部插入一個值two,當列表不存在時自動建立一個列表,key1為列表名
     $redis->rPush("key1","two");

   //將一個插入已存在的列表頭部,列表不存在時操作無效
    $redis->rPushx("key1","1");

    //刪除列表的第一個元素並返回列表和列表的第一個元素,當key1不存在或不是列表則返回false
    $redis->lPop('key1');

    //刪除列表的最後一個元素並返回列表和列表的最後一個元素,當key1不存在或不是列表則返回false
    $redis->rPop('key1');

   //刪除並或取列表的第一個元素,如果沒有元素則會阻塞直到等待超時
   $redis->blPop('asd', 10);

   //刪除並或取列表的最後一個元素,如果沒有元素則會阻塞直到等待超時
   $ret = $redis->brPop('asd', 10);

   //移除列表key1中最後一個元素,將其插入另一個列表asd頭部,並返回這個元素。若源列表沒有元素則返回false
    $redis->rpoplpush('key1', 'asd');

    //移除列表key1中最後一個元素,將其插入另一個列表asd頭部,並返回這個元素。如果列表沒有元素則會阻塞列表直到超時,超時返回false。
    $ret = $redis->brpoplpush('key1', 'asd', 10);

   //返回列表長度
    $redis->lLen('key1');

   //通過索引 (也就是下標key) 獲取列表中的元素,如果沒有該索引,則返回false。
    $redis->lindex('key1', 0);
    
    //通過索引修改列表中元素的值,如果沒有該索引,則返回false。
    $redis->lSet('key1', 2, '1');


    //在列表key1中指定元素six前面或後面插入元素。若指定元素不在列表中,或列表不存在時,不執行任何操作
    //Redis::AFTER插入元素後面    Redis::BEFORE插入元素前面
    //返回值:插入成功返回插入後列表元素個數,若key1不存在返回0,若key1不是列表返回false
    $redis->lInsert('key1', Redis::BEFORE, 'one', '1');

    //根據第三個引數(count),刪除掉相對的value
    //count > 0 : 從表頭開始向表尾搜尋,移除與value相等的元素,數量為count。
    //count < 0 : 從表尾開始向表頭搜尋,移除與value相等的元素,數量為count的絕對值。
    //count = 0 : 移除表中所有與value相等的值。
    //返回實際刪除元素個數
    $redis->lrem('key1', '1', -2);

      //對一個列表進行擷取,只保留指定區間 (如:下標1到10) 的元素,其他元素都刪除。成功返回true。
    $redis->ltrim('key1', 1, 10);

   // 獲取儲存的資料並輸出列表下標0到5的資料
   // 0為開始查詢的列表裡的第一個元素,-1則為最後一個元素
   // 5代表查詢5條資料,當5為-1時則檢視所有資料,
   $redis->lrange("key1", 0 ,5);




/**
 *
 * Set操作
 * 集合命令
 * 保證資料的唯一
 * 不保證順序
 * 
 */


//將一個元素加入集合,已經存在集合中的元素則忽略。若集合不存在則先建立,若key不是集合型別則返回false,若元素已存在返回0,插入成功返回1。
$redis->sAdd('set3', '11');


//返回集合中所有成員。
$redis->sMembers('set3');

//判斷集合裡是否存在指定元素,是返回true,否則返回false。
$redis->sismember('set', 'hello');

//返回集合中元素的數量。
$redis->scard('set');

//隨機刪除並返回集合裡的一個元素。
$redis->sPop('set');

//隨機返回(n)個集合內的元素,由第二個引數決定返回多少個
//如果 n 大於集合內元素的個數則返回整個集合
//如果 n 是負數時隨機返回 n 的絕對值,陣列內的元素會重複出現
$redis->sRandMember('set', -20);

//刪除集合中指定的一個元素,元素不存在返回0。刪除成功返回1,否則返回0。
$redis->srem('set', 'hello');

//模糊搜尋相對的元素,
//引數:key,迭代器變數,匹配值,每次返回元素數量(預設為10個)
$redis->sscan('set', $it, 's*', 5);

//將指定一個源集合裡的值移動到一個目的集合。成功返回true,失敗或者源集合值不存在時返回false。
//引數:源集合,目標集合,移動的元素
$redis->sMove('set', 'set2', 'sdf4');

//以第一個集合為標準,後面的集合對比,返回差集
 $redis->sDiff('set', 'set2','set3');

//引數:第一個引數為目標集合,儲存缺少的值(三個集合相加,同樣欄位覆蓋,組合成一個新的集合)返回第一個引數所增加的值的個數。
$redis->sDiffStore('set', 'set3', 'set2');

//返回所有集合的相同值,必須所有集合都有,不存在的集合視為空集。
$redis->sInter('set', 'set3', 'set2');

//引數:第一個引數為目標集合,儲存後面集合的交集
//若目的集合已存在則覆蓋它。返回交集元素個數,否則返回儲存的交集
$redis->sInterStore('set4', 'set', 'set3');

//把所有集合合併在一起並返回
$redis->sUnion('set', 'set2', 'set3');

//以第一個集合為目標,把後面的集合合併在一起,儲存到第一個集合裡面,如果已經存在則覆蓋掉,並返回並集的個數
$redis->sUnionStore('set4', 'set', 'set2', 'set3');