2018-01-05

1.存儲key value以及5種不同的數(shù)據(jù)結(jié)構(gòu)之間的mapping(映射)
2.redis不使用表格

  1. memcached只能保存字符串
  2. redis儲存---------主儲存(primary storage)
    |
    |
    |
    |-------二級儲存(secondary storage)
    |
    |
    |
    |

5.需要考慮的問題是,由于redis屬于內(nèi)存數(shù)據(jù)庫,當(dāng)服務(wù)器關(guān)閉的時候,數(shù)據(jù)也會丟失。那么數(shù)據(jù)該何去何從,但是redis提供了兩種數(shù)據(jù)持久化的方式,都可以將數(shù)據(jù)以小而緊湊的格式寫入硬盤中,分別為<<<1>>>時間點(diǎn)轉(zhuǎn)儲(point-in-time dump),其中可以通過在一定時間內(nèi)到達(dá)一定數(shù)量的寫入操作執(zhí)行,當(dāng)這一條件能夠滿足的時候,又可以通過兩條轉(zhuǎn)存到硬盤(dump-to-disk)兩條命令的一條來執(zhí)行;第二種<<<2>>>是將所有修改了數(shù)據(jù)庫的命令都寫入一個只追加(append-only)的文件里面,用戶可以根據(jù)數(shù)據(jù)的重要程度,來設(shè)置不同步(sync),每秒同步一次或者每寫入一個命令同步一次。

6.Redis的數(shù)據(jù)結(jié)構(gòu)
---String 可以是字符串,整數(shù)或者浮點(diǎn)數(shù)
---List 一個鏈表,鏈表上的每個節(jié)點(diǎn)都包含了一個字符串
---Set 包含字符串的無序收集器,并且被包含的字符串都是獨(dú)一無二的
---Zset 字符串成員與浮點(diǎn)數(shù)分值之間的有序映射,元素的排列順序由分值大小決定
---Hash 包含鍵值對的無序散列表
其中Set和Zset是Redis特有的數(shù)據(jù)結(jié)構(gòu)


使用的Nodejs來與Redis進(jìn)行交互
首先要在nodejs相關(guān)項目下安裝redis包,執(zhí)行npm install redis --save
在nodejs中啟動server.js,server.js相關(guān)代碼如下
對于set的基本操作如下

const redis = require('redis');

const client = redis.createClient();

client.on('erro', (err)=>{
    console.log('Error' + err)
})
//string key, string value
client.set('hello', 'world', redis.print);
client.get("hello", function(err, reply) {
    // reply is null when the key is missing 
    console.log(reply);
});

這僅僅是對redis中的set結(jié)構(gòu)進(jìn)行設(shè)置,此時在控制臺返回的結(jié)果為Reply:OK以及world。


對于鏈表list,一個鏈表可以有序的保存多個字符串,其中包含的字符串可以重復(fù)出現(xiàn),其中對于鏈表的操作LPUSH,RPUSH分別是從list的左邊和右邊推入元素,而LPOP以及RPOP是分別從list的左邊以及右邊彈出元素。LINDEX是獲取給定位置的單個元素,LRANGE是返回列表給定范圍內(nèi)的所有元素

client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
    console.log(reply); //prints 2
});

返回的是list的長度。所表達(dá)的信息是創(chuàng)建了一個叫frameworkslist,然后推入了兩個元素,分別為angularbackbone,返回的是list的長度

client.lrange('frameworks', 0, -1, function(err, reply) {
    console.log(reply); // ['angularjs', 'backbone']
});

Redis集合(set)

Redis集合和Redis列表都可以保存多個字符串,不同點(diǎn)在于,Redis集合通過散列表來保證儲存的字符串各不相同,而Redis列表中卻可以儲存相同的字符串,由于Redis集合使用了無序(unordered)的保存方式來保存元素,因此Redis集合不能像鏈表一樣從兩側(cè)推入或者彈出元素。不過用戶可以通過SADD或者SREM進(jìn)行添加元素到集合中,或者從集合中刪除某特定元素。SISMEMBER可以快速檢查某個元素是否存在Redis集合里?;蛘呤褂?code>SMEMBERS獲取集合內(nèi)包含的所有元素
在Nodejs中使用如下

client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
    console.log(reply); // 3
});

返回set的長度為3,tags為Redis集合的名字。

client.smembers('tags', function(err, reply) {
    console.log(reply);
});

此時會返回[ 'emberjs', 'backbonejs', 'angularjs' ],即集合tags里面的內(nèi)容


Redis散列(hash)

Redis散列可以保存多個鍵值對之間的映射。和字符串一樣,散列的值即可以是字符串,也可以是數(shù)字。并且用戶可以對這些數(shù)值做自增自減操作。

client.hmset('frameworks', {
    'javascript': 'AngularJS',
    'css': 'Bootstrap',
    'node': 'Express'
});

Redis的有序集合(zset)

有序集合和散列一樣,用來存儲鍵值對;有序集合的鍵被稱作成員(member),每個成員各不相同;有序集合的值被稱為分值(score),分值必須為浮點(diǎn)數(shù),Redis有序集合是唯一一個即可以根據(jù)成員訪問元素,也可以通過分值以及分值的排列順序來訪問元素的結(jié)構(gòu)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容