色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Redis簡單案例:網(wǎng)站搜索的熱搜詞

電子工程師 ? 來源:lq ? 2018-12-31 11:50 ? 次閱讀

對于一個網(wǎng)站來說,無論是商城網(wǎng)站還是門戶網(wǎng)站,搜索框都是有一個比較重要的地位,它的存在可以說是為了讓用戶更快、更方便的去找到自己想要的東西。對于經(jīng)常逛這個網(wǎng)站的用戶,當然也會想知道在這里比較“火”的東西是什么,這個時候我們搜索框上的熱詞就起作用了。其實我覺得這一塊的完善會對這個網(wǎng)站帶來許多益處。

可能現(xiàn)在比較普遍的做法是把這些相應的信息存到我們的關系型數(shù)據(jù)庫中,如sql server 和 oracle。方便起見的話,可能每搜索一次就往表里插一次數(shù)據(jù),用的時候要先統(tǒng)計數(shù)據(jù),統(tǒng)計完后再排序,最后才展示。這種情況下,如果搜索量很大的話,表的膨脹速度就會非常快,如果sql沒寫好,查詢的時候估計會。。相比Redis,同等條件下,Redis的速率肯定是會較優(yōu),畢竟是從內(nèi)存中拿出來的。

下面我們就用.NET Core和StackExchange.Redis來做一下這個簡單的案例。

案例用到的一些相關技術(shù)和說明:

開始正題之前,我們要確定用Redis中的那種數(shù)據(jù)結(jié)構(gòu),五種之中比較合適的應該是SortedSet,我們可以用成員來作為搜索詞,成員分數(shù)來作為搜索詞的搜索次數(shù),這樣就可以很方便的來操作相關的數(shù)據(jù)了。

下面開始正題:

我們在開始的時候需要初始化一下數(shù)據(jù)。這里就直接在第一次運行的時候初始化。用上流水線的技術(shù),速度還是很可觀的。初始化了70個搜索關鍵詞(NBA球星),然后用隨機數(shù)作為關鍵字的下標,去隨機給這個關鍵字加1分。這個分數(shù)就是這個關鍵字被搜索的次數(shù)。下面來看看初始化的相關代碼:

publicIActionResultIndex(){//keysIListkeys=newList(){"kobe","johnson","jabbar","west","o'neal","baylor","mccann","worthy","gasol","chamberlain","fisher","odom","bynum","horry","rambis","riley","clarkson","Williams","young","Russell","ingram","randle","nance","brown","deng","yi","ariza","artest","walton","vujacic","james","paul","curry","park","yao","kevin","wade","rose","popovich","leonard","aldridge","ginobili","duncan","lavine","rubio","garnett","wiggins","westbrook","durant","ibaka","nowitzki","pierce","crawford","love","smith","iguodala","barnes","green","thompson","harden","lillard","mccollum","lin","jackson","nash","stoudemire","whiteside","dragic","Howard","batum"};//initRandomrandom=newRandom();vartran=_redis.GetTransaction();for(inti=0;i

這里是在加載這個頁面的時候就把這些熱搜詞存進Redis中,這樣我們才能有數(shù)據(jù)來演示啊。這里還用到了一個非事務型的流水線。就是把要操作的指令存放到一個隊列中,最后把這個隊列扔到服務端去執(zhí)行,這樣就有效的減少了不必要的網(wǎng)絡傳輸,同時也提高了執(zhí)行速度。

好了,初始數(shù)據(jù)有了,下面要做的就是用戶在搜索的時候,根據(jù)用戶的輸入去匹配搜索次數(shù)多的關鍵字,展示最Hot的10個,當然這個展示的個數(shù)是隨我們定的,最后可以考慮把這個放到我們的配置文件中去,甚至是放到數(shù)據(jù)庫中,

為的是靈活和方便維護。下面是我們在后臺的處理邏輯:

publicIActionResultGetHotKey(stringkey=""){if(string.IsNullOrEmpty(key)){//defaultvarres=_redis.ZRevRange(_searchKey,0,9);varlist=(fromiinresselecti.ToString());returnJson(list);}else{//byuserinputvarres=_redis.ZRevRange(_searchKey,0,-1);varlist=(fromiinresselecti.ToString()).Where(x=>x.Contains(key)).Take(10).ToList();returnJson(list);}}

對于查詢的處理是非常的簡單的,用戶不小心輸入空格的時候就展示最熱的10個關鍵詞,如果用戶有輸入的話,就把關鍵詞中包含用戶輸入的展示出來。那么我們在頁面上要做些什么呢?下面就是我們演示用的搜索框。

Search

相應的js是寫到 scripts 這個section中的,js的話是比較簡單的就是用ajax去請求我們要展示的數(shù)據(jù)。更多的應該是jquery-ui的api問題,大家也可以換用自己比較熟悉的組件,舉一反三即可。下面是autocomplete的api,如果有需要可以去看一下。

@sectionscripts{$(function(){//showhotkeyword$("#key").autocomplete({source:function(request,response){$.ajax({url:"@Url.Action("GetHotKey","Auto")",dataType:"json",data:{key:request.term},success:function(data){response(data);}});},});}

到這里,用戶搜索前的操作,我們是做好了,下面先來看一下效果。

那么用戶點擊了搜索之后我們要做些什么處理呢?無論是新的關鍵字還是已有的關鍵字,我們都是要做處理的,當然redis中zincrby命令來處理這個是十分合適的,存在的就把分數(shù)加1,不存在就創(chuàng)建一個分數(shù)為1的成員。下面是搜索時的后臺邏輯處理:

[HttpPost]publicIActionResultSetHotKey(stringkey){if(!string.IsNullOrWhiteSpace(key)){_redis.ZIncrby(_searchKey,key);//other//...returnJson(new{code="000",msg="OK"});}else{returnJson(new{code="999",msg="keywordcannotbeempty!"});}}

限制了用戶不能搜索空關鍵字,在把這個關鍵字存儲或者分數(shù)加一之后,就是展示我們的搜索的結(jié)果。這個搜索的結(jié)果一般是從solr等全文檢索的地方查出來的,不是我們講的重點,所以就忽略了。然后我們還要加一段js去處理我們搜索的時候應該做的操作。當然,都是些比較簡單的操作。

//search$("#searchSubmit").click(function(){$.ajax({url:"@Url.Action("SetHotKey","Auto")",dataType:"json",type:"POST",data:{key:$("#key").val()},success:function(data){if(data.code=="000"){$("

searchsuccessful!

").appendTo("#result");}else{$("

"+data.msg+"

").appendTo("#result");}}});});

下面是效果圖:

在演示的時候,我們搜索了“我愛你”和“我不信”,在Redis的客戶端我們找出搜索次數(shù)最少的6個,然后就可以看到我們那兩個關鍵字最的分數(shù)都是1。確定是剛插入的數(shù)據(jù)。

到這里,我們做的這個熱搜詞可以說是大功告成了。當然這可以說是最最最簡單的一個雛形。我們還可以適當?shù)奶砑右恍〇|西讓這個功能變得更加完善。比如我可以在搜索展示的時候顯示一下搜索的次數(shù)等。

最后是完整的控制器和頁面代碼:

usingAutoCompleteDemo.Common;usingMicrosoft.AspNetCore.Mvc;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceAutoCompleteDemo.Controllers{publicclassAutoController:Controller{privatereadonlyIRedis_redis;privatereadonlystring_searchKey="search";publicAutoController(IRedisredis){_redis=redis;}publicIActionResultIndex(){//keysIListkeys=newList(){"kobe","johnson","jabbar","west","o'neal","baylor","mccann","worthy","gasol","chamberlain","fisher","odom","bynum","horry","rambis","riley","clarkson","Williams","young","Russell","ingram","randle","nance","brown","deng","yi","ariza","artest","walton","vujacic","james","paul","curry","park","yao","kevin","wade","rose","popovich","leonard","aldridge","ginobili","duncan","lavine","rubio","garnett","wiggins","westbrook","durant","ibaka","nowitzki","pierce","crawford","love","smith","iguodala","barnes","green","thompson","harden","lillard","mccollum","lin","jackson","nash","stoudemire","whiteside","dragic","Howard","batum"};//initRandomrandom=newRandom();vartran=_redis.GetTransaction();for(inti=0;ix.Contains(key)).Take(10).ToList();returnJson(list);}}[HttpPost]publicIActionResultSetHotKey(stringkey){if(!string.IsNullOrWhiteSpace(key)){_redis.ZIncrby(_searchKey,key);//other//...returnJson(new{code="000",msg="OK"});}else{returnJson(new{code="999",msg="keywordcannotbeempty!"});}}}}AutoController@{ViewData["Title"]="AutoComplete";}Search@sectionscripts{$(function(){//showhotkeyword$("#key").autocomplete({source:function(request,response){$.ajax({url:"@Url.Action("GetHotKey","Auto")",dataType:"json",data:{key:request.term},success:function(data){response(data);}});},});//search$("#searchSubmit").click(function(){$.ajax({url:"@Url.Action("SetHotKey","Auto")",dataType:"json",type:"POST",data:{key:$("#key").val()},success:function(data){if(data.code=="000"){$("

searchsuccessful!

").appendTo("#result");}else{$("

"+data.msg+"

").appendTo("#result");}}});});});}Index.cshtml

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴

原文標題:Redis 簡單案例(一):網(wǎng)站搜索的熱搜詞

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    [分享]最強山寨版搜索引擎震驚世界-熊熊搜索

    3295901讓筆者特別喜歡的就是首頁的關鍵排名,雖然這是谷歌的創(chuàng)意,但是放在首頁上,每次一打開就知道全世界在什么。而且邊上就是最熱門的新聞和天涯的貼,所以你只要看熊熊的首頁,馬上就可以了解整個互聯(lián)網(wǎng)
    發(fā)表于 11-22 18:58

    ?網(wǎng)站建設 ?網(wǎng)站推廣 ?關鍵優(yōu)化 ?百度地標 ?歡迎...

    ?網(wǎng)站建設 ?網(wǎng)站推廣 ?關鍵優(yōu)化 ?百度地標 ?歡迎咨詢QQ:2991704102
    發(fā)表于 03-15 16:13

    關于電子發(fā)燒友論壇帖子搜索的問題建議

    搜索帖子,應該是每一個電子發(fā)燒友的愛好,也是一種習慣。大家都希望通過搜索關鍵來尋找自己想要的帖子。但是經(jīng)過我這么長時間的使用,發(fā)現(xiàn)我們這個網(wǎng)站
    發(fā)表于 07-23 11:28

    labview中的搜索藍牙不到藍牙

    已將藍牙適配器插入電腦且已安裝該藍牙適配器的驅(qū)動,為啥通過藍牙的搜索藍牙設備函數(shù)不到藍牙?
    發(fā)表于 01-14 15:48

    離線語音Snowboy喚醒語音識別

    離線語音Snowboy喚醒語音識別現(xiàn)在有非常廣泛的應用場景,如手機的語音助手,智能音響(小愛,叮咚,天貓精靈...)等.語音識別一般包含三個階段:喚醒,語音錄入,識別和邏輯控制
    發(fā)表于 07-30 08:06

    如何使得redis中的數(shù)據(jù)不再有

    嵌入式Linux系統(tǒng)重啟后如何使得redis中的數(shù)據(jù)不再有今天在工作中遇到一個問題:網(wǎng)頁展示redis中的數(shù)據(jù),然而再Linux系統(tǒng)重啟后網(wǎng)頁還能展示redis中的數(shù)據(jù),感覺很奇怪,到網(wǎng)上
    發(fā)表于 11-05 08:50

    如何清除劃搜索

    如何清除劃搜索    Q:董師傅,我安裝了一個叫做劃搜索的工具,現(xiàn)在想卸載,可是它的屬性是只讀,刪除時系統(tǒng)提示無
    發(fā)表于 02-25 10:42 ?521次閱讀

    首推行業(yè)垂直搜索 專注電子商務信息

    首推行業(yè)垂直搜索 專注電子商務信息 3月5日消息,據(jù)番薯網(wǎng)表示,其圖書搜索平臺有望在3月份正式亮相,其將采用中的核心搜索技術(shù)。就近
    發(fā)表于 03-06 08:42 ?569次閱讀

    基于盲GDH簽名的無記憶模糊關鍵搜索

    在云計算中,用戶在計算過程中的數(shù)據(jù)安全問題已經(jīng)成為制約云計算發(fā)展的一個瓶頸。本文針對云計算中的加密搜索問題,提出一個有效的加密搜索方案。在搜索過程中,為保證用戶的數(shù)據(jù)安全,用戶需要隱藏搜索
    發(fā)表于 12-14 14:14 ?0次下載

    區(qū)塊鏈已經(jīng)超過了加密貨幣成為了最受歡迎的搜索

    區(qū)塊鏈一在谷歌的搜索中出現(xiàn)的頻率更高。事實上,從今年下半年的搜索頻率來看,它一直都超過了“加密貨幣”這個。區(qū)塊鏈在7月份第一次這么做了,根據(jù)谷歌的說法,從9月份開始,它就成為了一個
    發(fā)表于 11-08 11:49 ?584次閱讀

    百度推無廣告“簡單搜索”網(wǎng)頁版?官方回應:沒有 未來會考慮

    針對近日傳的無廣告簡單搜索網(wǎng)頁版,今日,百度簡單搜索APP官方回應稱,注意到關于百度推出簡單
    的頭像 發(fā)表于 04-07 11:28 ?2608次閱讀
    百度推無廣告“<b class='flag-5'>簡單</b><b class='flag-5'>搜索</b>”網(wǎng)頁版?官方回應:沒有 未來會考慮

    AI占據(jù)榜首位置 成為2019年最受網(wǎng)友關注的科技

    2019年的尾聲,百度發(fā)布了百度沸點2019十大科技。這十大是基于網(wǎng)友全年搜索數(shù)據(jù),只以搜索
    發(fā)表于 01-13 15:56 ?555次閱讀

    谷歌發(fā)布“2020年全球榜”

    谷歌發(fā)布了“2020年全球榜”,從獨特的視角解讀今年人們關注的熱點事件和社會趨勢。熱門搜索關鍵分別是Coronavirus、Election results、Kobe Bryan
    的頭像 發(fā)表于 12-10 15:12 ?3077次閱讀

    5月電子元器件

    本期前四品牌ST,NXP,ADI,MOLEX,品類包括MCU芯片,MOSFET,連接器,分立器件等。
    的頭像 發(fā)表于 06-16 15:45 ?1572次閱讀
    5月電子元器件<b class='flag-5'>熱</b><b class='flag-5'>搜</b>榜

    Redis官方搜索引擎來了,性能炸裂!

    RediSearch 是一個 Redis 模塊,為 Redis 提供查詢、二級索引和全文搜索功能。
    的頭像 發(fā)表于 02-21 10:01 ?2323次閱讀
    <b class='flag-5'>Redis</b>官方<b class='flag-5'>搜索</b>引擎來了,性能炸裂!
    主站蜘蛛池模板: 成人免费肉动漫无遮网站| 51成人精品午夜福利AV免费七| 中文字幕一区二区三区在线观看 | 1300部真实小Y女视频合集| 国产精品成人免费视频99| 欧美色图一区二区三区| 最近免费中文MV在线字幕| 黄片a级毛片| 亚洲精品无码一区二区三区四虎 | 欧美派对xxxhdparty| 7723日本高清完整版在线观看| 国产美女久久久久久久久久久| 暖暖 免费 高清 日本 在线| 在线va无卡无码高清| 久久99国产视频| 一本到道免费线观看| 国产91专区| 少妇久久久久久被弄高潮| 成人小视频在线免费观看| 人人啪日日观看在线| rio 快播| 快播看黄片| 中文字幕一区中文亚洲| 老师你下面好紧夹死了| 中文字幕久精品视频在线观看| 国产色综合久久无码有码| 微拍秒拍99福利精品小视频| 99久久re6热精品首页| 九九热在线视频| 在线va无卡无码高清| 美女打开双腿扒开屁股男生| 69日本人xxxx16—18| 午夜精品久久久久久久99蜜桃| 亚洲AV久久无码精品九号软件 | 久久精品视在线观看85| 色小姐.com| 二色AV天堂在线| 肉动漫无修3D在线观看| 纯肉高H放荡受BL文库| 漂亮的保姆3中文版完整版| 中文字幕亚洲欧美日韩2o19 |