2023年10月31日 11:45:39
情景: 我們平台有好多遊戲, 運營的同事在查詢某一款遊戲的時候, 目前使用的是html的select下拉列表的展現形式, 運營的同事得乙個個去找,然後選中,耗時又費眼
效果: 輸入"三國"或者"國三", 將自動列出所有包含"三國"的遊戲名字, 輸入不限順序; 例如輸入"殺三國",仍然會將"三國殺"這款遊戲找出來
實現: 我用redis的集合+php的array_intersect()和mb系列函式, 實現了乙個超迷你的全文檢索功能
原理: (大道不過兩三言,說穿不值一文錢,哈哈)
1, 將所有的遊戲名字讀出來,拆分成單個漢字
2, 將這些漢字作為redis集合的鍵,寫入redis,每個集合裡的值是所有那些遊戲名字中包含此漢字的遊戲的id
3, 當使用者輸入文字的時候通過ajax非同步請求,將使用者輸入傳給php
4, 將輸入的文字拆分成單個漢字, 分別找到這些漢字在redis中的集合值
5, 取出來,求交集,就找到了同時包含這幾個漢字的遊戲的id
6, 最後到資料庫裡查出來相應的遊戲資訊即可
缺點: 刪除資料不方便
php寫入redis和檢索的**:
1//自動補全
2//不限輸入漢字的前後順序: 輸入"國三殺" => 輸出 "三國殺"
3function
getautocomplate()410
$intwordlength = mb_strlen($word, 'utf-8');
1112
$this->load->library('iredis');
13if (1 == $intwordlength
) else22}
2324
$arrgame = $this->gamemodel->getgamenameforautocomplate($arrgid
);25
//var_dump($arrgame);exit;
26$jsongame = json_encode($arrgame
);27
exit($jsongame
);28}29
30//
自動補全, 建立索引
31function
setautocomplate()
3241}42
43$this->load->library('iredis');
44foreach ($arrindex
as$word => $arrgid
) 48}49
50 }
操作redis的方法
1//自動補全功能
2public
function setautocomplate($key, $value)3
78//自動補全功能
9public
function getautocomplate($key)10
finger php 框架
PHP redis實現超迷你全文檢索
情景 我們平台有好多遊戲,運營的同事在查詢某一款遊戲的時候,目前使用的是html的select下拉列表的展現形式,運營的同事得乙個個去找,然後選中,耗時又費眼 效果 輸入 三國 或者程式設計客棧 國三 將自動列出所有包含 三國 的遊戲名字,輸入不限順序 例如輸入 殺三國 仍然會將 三國殺 這款遊戲找...
php redis實現訊息佇列
參考 參考 訊息佇列 是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它 應用場景 非同步處理,應用解耦,流量削鋒和訊息通訊四個場景 1 非同步處...
php redis實現延遲佇列
基於redis有序集實現延遲任務執行,比如某個時間給某個使用者發簡訊,訂單過期處理,等等 我是在tp5框架上寫的,實現起來很簡單,對於一些不是很複雜的應用足夠了,目前在公司專案中使用,後台程序並沒有實現多程序,不多說,貼 不回排版,見諒 1 命令列指令碼 執行方法 php think delay q...