redis中數(shù)據(jù)結(jié)構(gòu)有哪幾種

小編給大家分享一下redis中數(shù)據(jù)結(jié)構(gòu)有哪幾種,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

尼勒克網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

redis數(shù)據(jù)庫中有五種數(shù)據(jù)結(jié)構(gòu),它們分別是:string-字符串、Hash-字典、List-列表、Set-集合、Sorted Set-有序集合。

這五種數(shù)據(jù)結(jié)構(gòu)分別有著不同的使用場景,下面我們就來介紹下它們的使用場景。

1、String

String數(shù)據(jù)結(jié)構(gòu)是簡單的Key-Value類型,value不僅可以是String,也可以是數(shù)字(當(dāng)數(shù)字類型用Long可以表示的時候encoding就是整型,其他都存儲在sdshdr當(dāng)作字符串)。使用String類型,可以完全實現(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ù)器使用

2、Hash

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

3、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ù)取出進(jìn)行執(zhí)行。Redis還提供了操作List中某一段元素的API,你可以直接查詢,刪除List中某一段的元素。

(學(xué)習(xí)視頻分享:redis數(shù)據(jù)庫教程)

4、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)站的所有獨(dú)立 IP
3.好友推薦的時候,根據(jù) tag 求交集,大于某個 threshold 就可以推薦

5、Sorted Set

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

二、redis其他功能使用場景

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

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

2、事務(wù)

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

看完了這篇文章,相信你對“redis中數(shù)據(jù)結(jié)構(gòu)有哪幾種”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

新聞名稱:redis中數(shù)據(jù)結(jié)構(gòu)有哪幾種
本文鏈接:http://muchs.cn/article28/ihcojp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計網(wǎng)站維護(hù)、域名注冊、云服務(wù)器、做網(wǎng)站、小程序開發(fā)

廣告

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

小程序開發(fā)