在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

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

電子工程師 ? 來(lái)源:lq ? 2018-12-31 11:50 ? 次閱讀

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

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

下面我們就用.NET Core和StackExchange.Redis來(lái)做一下這個(gè)簡(jiǎn)單的案例。

案例用到的一些相關(guān)技術(shù)和說(shuō)明:

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

下面開始正題:

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

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

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

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

為的是靈活和方便維護(hù)。下面是我們?cè)诤笈_(tái)的處理邏輯:

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);}}

對(duì)于查詢的處理是非常的簡(jiǎn)單的,用戶不小心輸入空格的時(shí)候就展示最熱的10個(gè)關(guān)鍵詞,如果用戶有輸入的話,就把關(guān)鍵詞中包含用戶輸入的展示出來(lái)。那么我們?cè)陧?yè)面上要做些什么呢?下面就是我們演示用的搜索框。

Search

相應(yīng)的js是寫到 scripts 這個(gè)section中的,js的話是比較簡(jiǎn)單的就是用ajax去請(qǐng)求我們要展示的數(shù)據(jù)。更多的應(yīng)該是jquery-ui的api問(wèn)題,大家也可以換用自己比較熟悉的組件,舉一反三即可。下面是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);}});},});}

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

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

[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!"});}}

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

//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");}}});});

下面是效果圖:

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

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

最后是完整的控制器和頁(yè)面代碼:

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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [分享]最強(qiáng)山寨版搜索引擎震驚世界-熊熊搜索

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

    ?網(wǎng)站建設(shè) ?網(wǎng)站推廣 ?關(guān)鍵優(yōu)化 ?百度地標(biāo) ?歡迎...

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

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

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

    labview中的搜索藍(lán)牙不到藍(lán)牙

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

    離線語(yǔ)音Snowboy喚醒語(yǔ)音識(shí)別

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

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

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

    如何清除劃搜索

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

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

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

    基于盲GDH簽名的無(wú)記憶模糊關(guān)鍵搜索

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

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

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

    百度推無(wú)廣告“簡(jiǎn)單搜索”網(wǎng)頁(yè)版?官方回應(yīng):沒(méi)有 未來(lái)會(huì)考慮

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

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

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

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

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

    5月電子元器件

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

    Redis官方搜索引擎來(lái)了,性能炸裂!

    RediSearch 是一個(gè) Redis 模塊,為 Redis 提供查詢、二級(jí)索引和全文搜索功能。
    的頭像 發(fā)表于 02-21 10:01 ?2568次閱讀
    <b class='flag-5'>Redis</b>官方<b class='flag-5'>搜索</b>引擎來(lái)了,性能炸裂!
    主站蜘蛛池模板: 五月天综合在线 | 午夜剧j| 日本视频一区二区三区 | 国产第一页在线观看 | 免费视频久久看 | 中文字幕在线观看一区二区 | 狼人 成人 综合 亚洲 | 一区二区中文字幕在线观看 | 91精品啪国产在线观看免费牛牛 | 国产精品久久久久久久9999 | 免费观看黄色在线视频 | 亚洲黄色色图 | 欧美视频一区在线观看 | 四虎影院最新网址 | 天堂中文字幕在线观看 | 日本黄色大片免费 | 天天做夜夜爽 | bt天堂在线www种子搜索 | 激情福利 | www.99色| 黄色在线观看网址 | 国产嫩草影院在线观看 | 中文天堂最新版在线精品 | 中文字幕不卡免费高清视频 | 伊人网网 | 亚洲精品美女视频 | 亚洲伊人精品综合在合线 | 色国产在线视频一区 | 轻点灬大ji巴太粗太长了h | 欧美黑人性受xxxx精品 | 国产自在自线午夜精品视频在 | 亚洲欧洲无码一区二区三区 | 久久免费视频99 | 国产又爽又黄又粗又大 | 天天插天天舔 | 日本高清视频色www在线观看 | 饥渴少妇videos| 久久午夜宅男免费网站 | 性夜黄a爽爽免费视频国产 羞羞答答xxdd影院欧美 | 国产高清在线观看 | 97精品久久天干天天蜜 |