成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場景

這篇文章給大家分享的是有關(guān)redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場景的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

為丹徒等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及丹徒網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、丹徒網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

一、redis 數(shù)據(jù)結(jié)構(gòu)使用場景

原來看過 redisbook 這本書,對 redis 的基本功能都已經(jīng)熟悉了,從上周開始看 redis 的源碼。目前目標(biāo)是吃透 redis 的數(shù)據(jù)結(jié)構(gòu)。我們都知道,在 redis 中一共有5種數(shù)據(jù)結(jié)構(gòu),那每種數(shù)據(jù)結(jié)構(gòu)的使用場景都是什么呢?

String——字符串
Hash——字典
List——列表
Set——集合
Sorted Set——有序集合

下面我們就來簡單說明一下它們各自的使用場景:

1.String——字符串

String 數(shù)據(jù)結(jié)構(gòu)是簡單的 key-value 類型,value 不僅可以是 String,也可以是數(shù)字(當(dāng)數(shù)字類型用 Long 可以表示的時候encoding 就是整型,其他都存儲在 sdshdr 當(dāng)做字符串)。使用 Strings 類型,可以完全實現(xiàn)目前 Memcached 的功能,并且效率更高。還可以享受 Redis 的定時持久化(可以選擇 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供與 Memcached 一樣的 get、set、incr、decr 等操作外,Redis 還提供了下面一些操作:

1.LEN niushuai:O(1)獲取字符串長度
2.APPEND niushuai redis:往字符串 append 內(nèi)容,而且采用智能分配內(nèi)存(每次2倍)
3.設(shè)置和獲取字符串的某一段內(nèi)容
4.設(shè)置及獲取字符串的某一位(bit)
5.批量設(shè)置一系列字符串的內(nèi)容
6.原子計數(shù)器
7.GETSET 命令的妙用,請于清空舊值的同時設(shè)置一個新值,配合原子計數(shù)器使用

1.Hash——字典
在 Memcached 中,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲為一個字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別、積分等。這時候在需要修改其中某一項時,通常需要將字符串(JSON)取出來,然后進行反序列化,修改某一項的值,再序列化成字符串(JSON)存儲回去。簡單修改一個屬性就干這么多事情,消耗必定是很大的,也不適用于一些可能并發(fā)操作的場合(比如兩個并發(fā)的操作都需要修改積分)。而 Redis 的 Hash 結(jié)構(gòu)可以使你像在數(shù)據(jù)庫中 Update 一個屬性一樣只修改某一項屬性值。

       

存儲、讀取、修改用戶屬性

1.List——列表
List 說白了就是鏈表(redis 使用雙端鏈表實現(xiàn)的 List),相信學(xué)過數(shù)據(jù)結(jié)構(gòu)知識的人都應(yīng)該能理解其結(jié)構(gòu)。使用 List 結(jié)構(gòu),我們可以輕松地實現(xiàn)最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一個應(yīng)用就是消息隊列,可以利用 List 的 *PUSH 操作,將任務(wù)存在 List 中,然后工作線程再用 POP 操作將任務(wù)取出進行執(zhí)行。Redis 還提供了操作 List 中某一段元素的 API,你可以直接查詢,刪除 List 中某一段的元素

       

1.微博 TimeLine
2.消息隊列

1.Set——集合
Set 就是一個集合,集合的概念就是一堆不重復(fù)值的組合。利用 Redis 提供的 Set 數(shù)據(jù)結(jié)構(gòu),可以存儲一些集合性的數(shù)據(jù)。比如在微博應(yīng)用中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合。因為 Redis 非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個新的集合中。

       

1.共同好友、二度好友
2.利用唯一性,可以統(tǒng)計訪問網(wǎng)站的所有獨立 IP
3.好友推薦的時候,根據(jù) tag 求交集,大于某個 threshold 就可以推薦

1.Sorted Set——有序集合

和Sets相比,Sorted Sets是將 Set 中的元素增加了一個權(quán)重參數(shù) score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學(xué)成績的 Sorted Sets,其集合 value 可以是同學(xué)的學(xué)號,而 score 就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時候,就已經(jīng)進行了天然的排序。另外還可以用 Sorted Sets 來做帶權(quán)重的隊列,比如普通消息的 score 為1,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來獲取工作任務(wù)。讓重要的任務(wù)優(yōu)先執(zhí)行。

1.帶有權(quán)重的元素,比如一個游戲的用戶得分排行榜
2.比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),一般用到的場景不算太多

二、redis 其他功能使用場景

1.訂閱-發(fā)布系統(tǒng)

Pub/Sub 從字面上理解就是發(fā)布(Publish)與訂閱(Subscribe),在 Redis 中,你可以設(shè)定對某一個 key 值進行消息發(fā)布及消息訂閱,當(dāng)一個 key 值上進行了消息發(fā)布后,所有訂閱它的客戶端都會收到相應(yīng)的消息。這一功能最明顯的用法就是用作實時消息系統(tǒng),比如普通的即時聊天,群聊等功能。

1.事務(wù)——Transactions

誰說 NOSQL 都不支持事務(wù),雖然 Redis 的 Transactions 提供的并不是嚴格的 ACID 的事務(wù)(比如一串用 EXEC 提交執(zhí)行的命令,在執(zhí)行中服務(wù)器宕機,那么會有一部分命令執(zhí)行了,剩下的沒執(zhí)行),但是這個 Transactions 還是提供了基本的命令打包執(zhí)行的功能(在服務(wù)器不出問題的情況下,可以保證一連串的命令是順序在一起執(zhí)行的,中間有會有其它客戶端命令插進來執(zhí)行)。Redis 還提供了一個 Watch 功能,你可以對一個 key 進行 Watch,然后再執(zhí)行 Transactions,在這過程中,如果這個 Watched 的值進行了修改,那么這個 Transactions 會發(fā)現(xiàn)并拒絕執(zhí)行。

感謝各位的閱讀!關(guān)于Redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場景就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

分享標(biāo)題:Redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場景
標(biāo)題URL:http://jinyejixie.com/article4/pdccoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、微信公眾號、網(wǎng)站維護、企業(yè)網(wǎng)站制作、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
吉安市| 阿坝县| 左贡县| 乌拉特后旗| 石泉县| 延寿县| 邯郸县| 麟游县| 旺苍县| 绩溪县| 曲靖市| 高安市| 白水县| 上虞市| 册亨县| 敖汉旗| 吉安市| 清远市| 双流县| 沙雅县| 绥化市| 楚雄市| 修文县| 沙湾县| 玉田县| 图们市| 大荔县| 广南县| 红安县| 衡阳县| 太康县| 普陀区| 讷河市| 华池县| 景泰县| 手游| 河北区| 凤庆县| 横峰县| 章丘市| 剑河县|