1.存儲key value以及5種不同的數據結構之間的mapping(映射)
2.redis不使用表格
- memcached只能保存字符串
- redis儲存---------主儲存(primary storage)
|
|
|
|-------二級儲存(secondary storage)
|
|
|
|
5.需要考慮的問題是,由于redis屬于內存數據庫,當服務器關閉的時候,數據也會丟失。那么數據該何去何從,但是redis提供了兩種數據持久化的方式,都可以將數據以小而緊湊的格式寫入硬盤中,分別為<<<1>>>時間點轉儲(point-in-time dump),其中可以通過在一定時間內到達一定數量的寫入操作執行,當這一條件能夠滿足的時候,又可以通過兩條轉存到硬盤(dump-to-disk)兩條命令的一條來執行;第二種<<<2>>>是將所有修改了數據庫的命令都寫入一個只追加(append-only)的文件里面,用戶可以根據數據的重要程度,來設置不同步(sync),每秒同步一次或者每寫入一個命令同步一次。
6.Redis的數據結構
---String 可以是字符串,整數或者浮點數
---List 一個鏈表,鏈表上的每個節點都包含了一個字符串
---Set 包含字符串的無序收集器,并且被包含的字符串都是獨一無二的
---Zset 字符串成員與浮點數分值之間的有序映射,元素的排列順序由分值大小決定
---Hash 包含鍵值對的無序散列表
其中Set和Zset是Redis特有的數據結構
使用的Nodejs來與Redis進行交互
首先要在nodejs相關項目下安裝redis包,執行npm install redis --save
在nodejs中啟動server.js,server.js相關代碼如下
對于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結構進行設置,此時在控制臺返回的結果為Reply:OK
以及world
。
對于鏈表list,一個鏈表可以有序的保存多個字符串,其中包含的字符串可以重復出現,其中對于鏈表的操作LPUSH,RPUSH分別是從list的左邊和右邊推入元素,而LPOP以及RPOP是分別從list的左邊以及右邊彈出元素。LINDEX是獲取給定位置的單個元素,LRANGE是返回列表給定范圍內的所有元素
client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
console.log(reply); //prints 2
});
返回的是list的長度。所表達的信息是創建了一個叫frameworks
的list
,然后推入了兩個元素,分別為angular
和backbone
,返回的是list
的長度
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
Redis集合(set)
Redis集合和Redis列表都可以保存多個字符串,不同點在于,Redis集合通過散列表來保證儲存的字符串各不相同,而Redis列表中卻可以儲存相同的字符串,由于Redis集合使用了無序(unordered)的保存方式來保存元素,因此Redis集合不能像鏈表一樣從兩側推入或者彈出元素。不過用戶可以通過SADD
或者SREM
進行添加元素到集合中,或者從集合中刪除某特定元素。SISMEMBER
可以快速檢查某個元素是否存在Redis集合里。或者使用SMEMBERS
獲取集合內包含的所有元素
在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
里面的內容
Redis散列(hash)
Redis散列可以保存多個鍵值對之間的映射。和字符串一樣,散列的值即可以是字符串,也可以是數字。并且用戶可以對這些數值做自增自減操作。
client.hmset('frameworks', {
'javascript': 'AngularJS',
'css': 'Bootstrap',
'node': 'Express'
});
Redis的有序集合(zset)
有序集合和散列一樣,用來存儲鍵值對;有序集合的鍵被稱作成員(member),每個成員各不相同;有序集合的值被稱為分值(score),分值必須為浮點數,Redis有序集合是唯一一個即可以根據成員訪問元素,也可以通過分值以及分值的排列順序來訪問元素的結構