1. 程式人生 > >redis命令(常用簡單的例項)

redis命令(常用簡單的例項)

##這幾天就開始總結下redis,我們經常用的命令,以及例項吧!!!!

redis 佇列 List

常用命令:

blpop刪除,並獲得該列表中的第一元素,或阻塞,直到有一個可用

brpop刪除,並獲得該列表中的最後一個元素,或阻塞,直到有一個可用
brpoplpush

lindex獲取一個元素,通過其索引列表

linsert在列表中的另一個元素之前或之後插入一個元素

llen獲得佇列(List)的長度

lpop從佇列的左邊出隊一個元素

lpush從佇列的左邊入隊一個或多個元素

lpushx當佇列存在時,從隊到左邊入隊一個元素

lrange從列表中獲取指定返回的元素

lrem從列表中刪除元素

lset設定佇列裡面一個元素的值

ltrim修剪到指定範圍內的清單

lpop從佇列的右邊出隊一個元素

rpoplpush刪除列表中的最後一個元素,將其追加到另一個列表

rpush從佇列的右邊入隊一個元素

rpushx從佇列的右邊入隊一個元素,僅佇列存在時有效

例子:簡單的儲存佇列,取出佇列

<?php
include("logs.php");//引入的日誌類

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$arr = [['zhangsan'],['lisi'],['wanngwu'],['zhaoliu'],['xiaoqi']];

foreach($arr as $k => $v ){
    $v = json_encode($v); //陣列轉換成string去儲存
    //將這些放入佇列中
  $redis->rpush("mylist",$v);
  //記錄日誌
  write_log($v,'redis_list');

}

//檢視佇列中存進去了多少資料
$len = $redis -> llen("mylist");

//根據長度去迴圈,釋出佇列
for ( $i=0 ; $i< $len; $i++ ) {
    $redisList = json_decode($redis->lpop("mylist"),true);
}

?>

這個是最簡單的佇列,我做的最多的是用佇列去釋出債匹系統的使用者資訊,但是訂單中心那邊在生成訂單 在加入佇列的時候,會同時入庫好幾次同樣的訂單號或者一個人點選生成的多個訂單(這個有時候外部掌握刷介面也會導致),所以我們解決方案!

排查分析:1.前端頁面沒有控制點選次數,一個人會生成多條資料,或者是同一時間的多少秒之內是不允許生生訂單的
        2.後端資料沒有在加入佇列的時候設定一個訂單的儲存的時間做標示
        3.那就是分佈存貯訂單號和使用者id,判斷以上是否是同一個人去刷介面
        4.就是利用事物try catch ,在事物中使用sleep去停留幾秒

以上的話,就會多出好幾個redis的儲存褲,別看比較起來比較麻煩,如果真的出問題,到後期放款的時候白花花的銀子就給人家了,還要不回來,這是責任啊

使用者id和,訂單庫(雜湊)
佇列庫

三方只要有一方失敗,事物就會回滾

先對比當前使用者在一段時間內生生幾個訂單,對應著的時間,當前的訂單號在裡面是否存在,如果不存在那就判斷當前的時間和最後一個入庫的時間是否小於設定的時間,當不小於的時候繼續執行,訂單資訊入佇列

laravel 佇列利用redis 和queued類包,然後實現的