国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Redis用select選擇數據庫有什么意義?

Redis用select選擇數據庫有什么意義?

來源:千鋒教育
發布人:xqq
時間: 2023-10-13 15:24:41 1697181881

一、Redis用select選擇數據庫的意義

1、數據是隔離的

Redis的不同數據庫之間是互相隔離的,每個數據庫中的命名空間都是獨立的,數據不會互相干擾,可以提供更好的數據管理和保護。

2、能夠提高效率

使用不同的數據庫可以避免數據之間的相互干擾,減少系統的競爭,并提高系統的并發能力和性能。

3、數據可以進行分類

可以基于業務需要將數據分門別類地存儲在不同的數據庫中,方便對不同類型的數據進行分類管理和查詢。

二、Redis介紹

1、定義

redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

Redis 是一個高性能的key-value數據庫。 redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客戶端,使用很方便。

Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。

redis的官網地址,非常好記,是redis.io。(域名后綴io屬于國家域名,是british Indian Ocean territory,即英屬印度洋領地),Vmware在資助著redis項目的開發和維護。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Redis的開發由Pivotal贊助。

2、數據模型

Redis的外圍由一個鍵、值映射的字典構成。與其他非關系型數據庫主要不同在于:Redis中值的類型不僅限于字符串,還支持如下抽象數據類型:

字符串列表無序不重復的字符串集合有序不重復的字符串集合鍵、值都為字符串的哈希表

值的類型決定了值本身支持的操作。Redis支持不同無序、有序的列表,無序、有序的集合間的交集、并集等高級服務器端原子操作。

三、Redis中的數據結構

1、string(字符串)

string是最簡單的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value,其上支持的操作與Memcached的操作類似。但它的功能更豐富。redis采用結構sdshdr和sds封裝了字符串,字符串相關的操作實現在源文件sds.h/sds.c中。

數據結構定義如下:

typedefchar*sds;structsdshdr{longlen;longfree;charbuf[];};

2、list(雙向鏈表)

list是一個鏈表結構,主要功能是push、pop、獲取一個范圍的所有值等等。操作中key理解為鏈表的名字。對list的定義和實現在源文件adlist.h/adlist.c,相關的數據結構定義如下:

//list迭代器typedefstructlistIter{listNode*next;intdirection;}listIter;//list數據結構typedefstructlist{listNode*head;listNode*tail;void*(*dup)(void*ptr);void(*free)(void*ptr);int(*match)(void*ptr,void*key);unsignedintlen;listIteriter;}list;

3、dict(hash表)

set是集合,和我們數學中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交并差等操作。操作中key理解為集合的名字。在源文件dict.h/dict.c中實現了hashtable的操作,數據結構的定義如下:

//dict中的元素項typedefstructdictEntry{void*key;void*val;structdictEntry*next;}dictEntry;//dict相關配置函數typedefstructdictType{unsignedint(*hashFunction)(constvoid*key);void*(*keyDup)(void*privdata,constvoid*key);void*(*valDup)(void*privdata,constvoid*obj);int(*keyCompare)(void*privdata,constvoid*key1,constvoid*key2);void(*keyDestructor)(void*privdata,void*key);void(*valDestructor)(void*privdata,void*obj);}dictType;//dict定義typedefstructdict{dictEntry**table;dictType*type;unsignedlongsize;unsignedlongsizemask;unsignedlongused;void*privdata;}dict;//dict迭代器typedefstructdictIterator{dict*ht;intindex;dictEntry*entry,*nextEntry;}dictIterator;

dict中table為dictEntry指針的數組,數組中每個成員為hash值相同元素的單向鏈表。set是在dict的基礎上實現的,指定了key的比較函數為dictEncObjKeyCompare,若key相等則不再插入。

4、zset(排序set)

zset是set的一個升級版本,他在set的基礎上增加了一個順序屬性,這一屬性在添加修改元素的時候可以指定,每次指定后,zset會自動重新按新的值調整順序。可以理解了有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。數據結構的定義如下:

typedefstructzskiplistNode{structzskiplistNode**forward;structzskiplistNode*backward;doublescore;robj*obj;}zskiplistNode;typedefstructzskiplist{structzskiplistNode*header,*tail;unsignedlonglength;intlevel;}zskiplist;typedefstructzset{dict*dict;zskiplist*zsl;}zset;

延伸閱讀1:Redis的文件格式

redis使用了兩種文件格式,即全量數據和增量請求。全量數據格式是把內存中的數據寫入磁盤,便于下次讀取文件進行加載;增量請求文件則是把內存中的數據序列化為操作請求,用于讀取文件進行replay得到數據,序列化的操作包括SET、RPUSH、SADD、ZADD。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT