在线观看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)不再提示

玩轉(zhuǎn)Redis-使用有序集合(sorted sets)實(shí)現(xiàn)投票游戲

張康康 ? 2018-09-26 12:40 ? 次閱讀

極鏈科技Video++:劉偉

整理:包包

redis是一種提供多種數(shù)據(jù)類型的開源key-value存儲(chǔ)系統(tǒng),通常將數(shù)據(jù)全部存儲(chǔ)在內(nèi)存中。


redis是目前最受歡迎的key-value存儲(chǔ)系統(tǒng),是基于內(nèi)存存儲(chǔ)kv的數(shù)據(jù)庫,合理的使用redis作為緩存,可以極大的改善系統(tǒng)的性能和服務(wù)器請(qǐng)求響應(yīng)時(shí)間。

redis除了基本的kv存儲(chǔ)以外,還實(shí)現(xiàn)了哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等數(shù)據(jù)類型;結(jié)合內(nèi)存和數(shù)據(jù)結(jié)構(gòu)的特性,在業(yè)務(wù)功能實(shí)現(xiàn)的過程中,可以更靈活的實(shí)現(xiàn)很多特性。

今天介紹的是有序集合這種數(shù)據(jù)結(jié)構(gòu),我們?cè)趯?shí)際的業(yè)務(wù)過程中使用了有序集合,并且收獲到一些有價(jià)值的經(jīng)驗(yàn)。

什么是有序集合

在redis提供的數(shù)據(jù)類型中,有集合(Set)和有序集合(Sorted Set),在集合中不能添加重復(fù)的元素,相同值的元素只能有一個(gè);而有序集合可以給每個(gè)元素設(shè)置一個(gè)double類型的分?jǐn)?shù),通過這個(gè)值,redis能為集合中的成員進(jìn)行從小到大的排序。


在redis中,有序集合的實(shí)現(xiàn),使用的是一種叫[skiplist]數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)可以讓get、set、add和remove等操作的預(yù)期時(shí)間達(dá)到O(log N),具體的原理,有興趣可以自己了解。

有序集合提供了豐富的操作,可以在很多應(yīng)用場景應(yīng)用。

* zunionstore 是求兩個(gè)有序集合的并集,可以用來合并兩個(gè)投票中所有參與的人的排行榜。

* zinterstore 是求兩個(gè)集合的交集,通過它,可以獲得同時(shí)參加多個(gè)候選人投票的名單列表。

* zrevrank 方便的查詢某個(gè)元素在有序集合中的位置,也就是投票的排名。

* zscore 用來查詢某個(gè)元素在集合中的分

* zrevrank 返回某個(gè)元素在集合中的位置

* zrevrangebyscore 獲取某個(gè)分?jǐn)?shù)區(qū)間內(nèi)元素的排行榜

有序集合提供了從小到大和從大到小兩種排行榜,其中有rev的命令,返回的是從大到小的集合。

設(shè)計(jì)投票游戲

之所以會(huì)在投票游戲中選用redis,主要考慮高并發(fā)的支持,在實(shí)際應(yīng)用的場景中,因?yàn)橥镀钡臅r(shí)候可能有很高的并發(fā)投票和實(shí)時(shí)投票結(jié)果查詢,如果所有操作都直接操作數(shù)據(jù)庫,那么會(huì)對(duì)數(shù)據(jù)庫造成較大的負(fù)載。經(jīng)過考察技術(shù)方案和實(shí)現(xiàn)成本,決定采用redis提供的有序集合,實(shí)現(xiàn)投票過程和實(shí)時(shí)排名的展示,直接讀取緩存,避免了非核心業(yè)務(wù)對(duì)數(shù)據(jù)庫的突發(fā)高并發(fā)訪問。

投票游戲的用戶故事

1. 創(chuàng)建投票的候選人

2. 創(chuàng)建用戶

3. 用戶參加活動(dòng),獲得一定數(shù)量的投票額度

4. 用戶使用投票額度為候選人投票

5. 候選人查看為自己投票的用戶的計(jì)票排名

6. 所有人查看實(shí)時(shí)的候選人選票排名

游戲流程


首先是可以有管理員,創(chuàng)建候選人和用戶,或者候選人和用戶自己注冊(cè),這個(gè)取決于具體的場景的需要。本次demo提供的接口是用戶和候選人自己注冊(cè)的模式。存儲(chǔ)用戶和候選人信息,最簡單實(shí)現(xiàn)可以用redis的字符串類型key/value,本身就是hash,也可以使用redis提供的hash類型。

創(chuàng)建用戶以后,為用戶分配投票額度是要做的工作,通過redis的字符串類型,INCR實(shí)現(xiàn),可以保證操作的原子性。投票過程同樣在這個(gè)數(shù)據(jù)結(jié)構(gòu)上減去一定的值,但是為了防止并發(fā)情況下,用戶使用超過自己擁有的額度,需要設(shè)計(jì)一個(gè)鎖,只有在獲得鎖之后,才能做DECR操作。

投票扣減用戶的額度之后,就可以操作核心數(shù)據(jù)結(jié)構(gòu),有序集合。第一步是為特定的候選人增加上獲得的投票,這個(gè)是所有候選人的id作為鍵的有序集合,分?jǐn)?shù)就是獲得的總票數(shù);同時(shí)在用戶針對(duì)這名候選人的投票記錄上,也記錄每個(gè)用戶為同一個(gè)候選人投票的排名。

實(shí)現(xiàn)上面的操作之后,獲得實(shí)時(shí)投票排名,就是一件很輕松的工作。有序集合提供的操作可以簡單的查詢出各種排名有關(guān)的名單。

編碼實(shí)現(xiàn)redis的調(diào)用

設(shè)計(jì)好游戲流程之后,就可以開始直接動(dòng)手實(shí)現(xiàn)了,下面用redis-cli命令,以偽代碼的形式展示一下競猜的整個(gè)流程,可以直接在redis客戶端下查看效果。

redis-cli偽代碼

1. 創(chuàng)建用戶和競選的候選人

玩轉(zhuǎn)Redis-使用有序集合(sorted sets)實(shí)現(xiàn)投票游戲


2. 為用戶分配額度

玩轉(zhuǎn)Redis-使用有序集合(sorted sets)實(shí)現(xiàn)投票游戲


3. 用戶投票

玩轉(zhuǎn)Redis-使用有序集合(sorted sets)實(shí)現(xiàn)投票游戲


4. 各種榜單

玩轉(zhuǎn)Redis-使用有序集合(sorted sets)實(shí)現(xiàn)投票游戲


下圖是運(yùn)行結(jié)果:


node.js代碼

最后,我們用node.js實(shí)現(xiàn)了一個(gè)簡單的后端服務(wù)demo,javascript的數(shù)據(jù)結(jié)構(gòu)和redis SDK比較清晰的展示原生命令的調(diào)用效果。demo演示了各種api的調(diào)用,可以安裝說明,使用curl調(diào)用對(duì)應(yīng)的接口效果。

實(shí)現(xiàn)過程中,我們可以看到,如果直接使用命令,其實(shí)整個(gè)投票過程只需要非常簡單的幾個(gè)命令就可以完成。而demo中演示的代碼,相比命令,增加了很多提供接口訪問和sdk調(diào)用相關(guān)的代碼;如果最后為生產(chǎn)應(yīng)用編寫一個(gè)投票程序,根據(jù)業(yè)務(wù)邏輯的需要和容量規(guī)劃,還需要考慮更多的細(xì)節(jié),軟件開發(fā)本身也是這樣的過程,從一個(gè)簡單的想法和創(chuàng)意開始,然后需要考慮更多的現(xiàn)實(shí)場景和需求,不斷的在程序中還原出整個(gè)構(gòu)想。


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

    關(guān)注

    0

    文章

    382

    瀏覽量

    11265
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Redis 再次開源!

    “ ?Redis 現(xiàn)已采用 AGPLv3 開源許可證。? ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 這樣
    的頭像 發(fā)表于 05-06 18:26 ?160次閱讀

    redis三種集群方案詳解

    Redis中提供的集群方案總共有三種(一般一個(gè)redis節(jié)點(diǎn)不超過10G內(nèi)存)。
    的頭像 發(fā)表于 03-31 10:46 ?426次閱讀
    <b class='flag-5'>redis</b>三種集群方案詳解

    Redis實(shí)戰(zhàn)筆記

    在目前的技術(shù)選型中,Redis 儼然已經(jīng)成為了系統(tǒng)高性能緩存方案的事實(shí)標(biāo)準(zhǔn),因此現(xiàn)在?Redis 也成為了后端開發(fā)的基本技能樹之一。 ? 基于上述情況,今天給大家分享一份?杰哥?親筆撰寫的內(nèi)部
    的頭像 發(fā)表于 02-09 09:12 ?271次閱讀
    <b class='flag-5'>Redis</b>實(shí)戰(zhàn)筆記

    華為云 Flexus X 加速 Redis 案例實(shí)踐與詳解

    Redis 加速鏡像,更是為開發(fā)者提供了極大的便利。本文將詳細(xì)介紹如何利用華為云 Flexus X 實(shí)例自帶的 Redis 鏡像,快速部署并配置 Redis,以及通過實(shí)際案例展示其便捷性和高效性。 一、華為云 Flexus
    的頭像 發(fā)表于 01-23 17:52 ?237次閱讀
    華為云 Flexus X 加速 <b class='flag-5'>Redis</b> 案例實(shí)踐與詳解

    Redis Cluster之故障轉(zhuǎn)移

    1. Redis Cluster 簡介 Redis Cluster 是 Redis 官方提供的 Redis 集群功能。 為什么要實(shí)現(xiàn)
    的頭像 發(fā)表于 01-20 09:21 ?685次閱讀
    <b class='flag-5'>Redis</b> Cluster之故障轉(zhuǎn)移

    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 Redis 集群

    Redis 集群是一種分布式的 Redis 解決方案,能夠在多個(gè)節(jié)點(diǎn)之間分片存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)水平擴(kuò)展和高可用性。與傳統(tǒng)的主從架構(gòu)不同,Redis 集群支持?jǐn)?shù)據(jù)自動(dòng)分片、主節(jié)點(diǎn)故障自動(dòng)切換
    的頭像 發(fā)表于 01-13 13:37 ?273次閱讀
    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 <b class='flag-5'>Redis</b> 集群

    華為云Flexus X實(shí)例,Redis性能加速評(píng)測及對(duì)比

    隨著云計(jì)算技術(shù)的飛速發(fā)展,Redis 作為一種高性能的內(nèi)存數(shù)據(jù)庫,在各種應(yīng)用場景中發(fā)揮著越來越重要的作用。為了滿足不同用戶對(duì) Redis 性能的高要求,華為云推出了 Flexus X 實(shí)例,并提供了
    的頭像 發(fā)表于 12-29 15:47 ?388次閱讀
    華為云Flexus X實(shí)例,<b class='flag-5'>Redis</b>性能加速評(píng)測及對(duì)比

    華為云 Flexus X 輕松實(shí)現(xiàn) Redis 一主多從高效部署

    ,F(xiàn)lexus?X 預(yù)裝 Redis 加速鏡像,簡化了 Redis 的安裝和配置流程,降低了技術(shù)門檻,使開發(fā)者能夠更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。 ????????本文將詳細(xì)介紹如何在華為云 Flexus?X 上
    的頭像 發(fā)表于 12-27 13:45 ?408次閱讀
    華為云 Flexus X 輕松<b class='flag-5'>實(shí)現(xiàn)</b> <b class='flag-5'>Redis</b> 一主多從高效部署

    Redis緩存與Memcached的比較

    關(guān)鍵特性和差異: 1. 數(shù)據(jù)存儲(chǔ) Redis: Redis是一個(gè)開源的鍵值存儲(chǔ),支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、列表、集合有序集合、散列、位圖
    的頭像 發(fā)表于 12-18 09:33 ?454次閱讀

    nginx+lua+redis實(shí)現(xiàn)灰度發(fā)布

    作者:馬仁喜 前言: 授人以魚不如授人以漁 .先學(xué)會(huì)用,在學(xué)原理,在學(xué)創(chuàng)造,可能一輩子用不到這種能力,但是不能不具備這種能力。這篇文章主要是沉淀使用nginx+lua+redis實(shí)現(xiàn)灰度,當(dāng)我們具備
    的頭像 發(fā)表于 12-17 10:01 ?325次閱讀

    玩轉(zhuǎn)RK3588開發(fā)板基于connector-split 功能實(shí)現(xiàn)多屏聯(lián)動(dòng)

    玩轉(zhuǎn)RK3588開發(fā)板基于connector-split 功能實(shí)現(xiàn)多屏聯(lián)動(dòng)
    的頭像 發(fā)表于 12-02 16:05 ?743次閱讀
    <b class='flag-5'>玩轉(zhuǎn)</b>RK3588開發(fā)板基于connector-split 功能<b class='flag-5'>實(shí)現(xiàn)</b>多屏聯(lián)動(dòng)

    電動(dòng)汽車有序充電智能管控軟件平臺(tái)設(shè)計(jì)與應(yīng)用

    摘要: 為了打造便捷生活,實(shí)現(xiàn)對(duì)用戶充電信息的采集、充電狀態(tài)的實(shí)時(shí)監(jiān)測,該文基于電動(dòng)汽車立體車庫智能管控系統(tǒng),設(shè)計(jì)并開發(fā)電動(dòng)汽車有序充電智能管控軟件平臺(tái)。該軟件由電動(dòng)汽車有序充電后臺(tái)管理軟件和微信
    的頭像 發(fā)表于 10-29 15:51 ?468次閱讀
    電動(dòng)汽車<b class='flag-5'>有序</b>充電智能管控軟件平臺(tái)設(shè)計(jì)與應(yīng)用

    恒訊科技分析:云數(shù)據(jù)庫rds和redis區(qū)別是什么如何選擇?

    結(jié)構(gòu)化數(shù)據(jù),使用SQL作為查詢語言,支持ACID事務(wù)和多種復(fù)雜查詢操作。而Redis是一個(gè)基于內(nèi)存的非關(guān)系型數(shù)據(jù)庫,采用鍵值對(duì)模型存儲(chǔ)數(shù)據(jù),支持豐富的數(shù)據(jù)結(jié)構(gòu)如字符串、列表、集合、哈希表等。 2、性能:Redis以其超快的速度而
    的頭像 發(fā)表于 08-19 15:31 ?673次閱讀

    實(shí)現(xiàn)有序充電 合理規(guī)劃用電策略

    在光伏儲(chǔ)能項(xiàng)目蓬勃發(fā)展的今天,如何實(shí)現(xiàn)電動(dòng)汽車有序充電,已成為推動(dòng)綠色出行、構(gòu)建智能電網(wǎng)的關(guān)鍵一環(huán)。近日,業(yè)內(nèi)專家與企業(yè)共同探討了在光伏儲(chǔ)能項(xiàng)目中實(shí)施有序充電的創(chuàng)新方案,為未來的綠色交通和能源利用
    的頭像 發(fā)表于 07-11 15:39 ?446次閱讀

    一機(jī)實(shí)現(xiàn)All in one,NAS如何玩轉(zhuǎn)虛擬機(jī)!

    常言道,中年男人玩具有三寶 充電器、路由器、NAS 你問我NAS的魔力在哪里? 一機(jī)實(shí)現(xiàn)All in one灑灑水啦 那NAS又如何玩轉(zhuǎn)虛擬機(jī)呢? 跟我來 0基礎(chǔ)也能輕松get! NAS如何玩轉(zhuǎn)
    的頭像 發(fā)表于 05-28 14:44 ?792次閱讀
    一機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>All in one,NAS如何<b class='flag-5'>玩轉(zhuǎn)</b>虛擬機(jī)!
    主站蜘蛛池模板: 色a在线| 福利视频一区二区三区 | 美人岛福利 | 69国产成人综合久久精品 | 日本大黄在线观看 | 国产伦精一区二区三区 | 宅男午夜视频在线观看 | 丁香六月激情婷婷 | 国产精品福利在线观看免费不卡 | 国产乱子伦 | 欧美18同性gay视频 | 四虎精品影院在线观看视频 | 中国一级特黄高清免费的大片 | 大黄香蕉 | 六月丁香激情综合成人 | 欧美人与zoxxxx视频 | 黄在线观看在线播放720p | 高h办公室 | 色多多·com 色多多18免费观看 色多多a | 免费看啪啪网站 | 欧美人与物另类 | 中出丰满大乳中文字幕 | 日韩免费观看的一级毛片 | 色女仆影院 | 拍真实国产伦偷精品 | 日本黄色大片在线播放视频免费观看 | 亚洲电影一区二区 | 人人草97| 九九国产在线观看 | 亚洲精品理论 | 欧美性猛交xxxx乱大交中文 | 亚洲美女激情视频 | 欧美精品综合一区二区三区 | 色哥网站| 天天干天天要 | 宅男lu66国产在线播放 | 天天做天天爱天天大综合 | 99精品国产高清自在线看超 | 美国一级大黄香蕉片 | 俺去操 | 免费看的一级毛片 |