轉載請註明來源:redis在nodejs中的應用
redis是一個效能非常好的記憶體資料庫,部署在應用程式和mysql資料中間做快取資料庫,可以極大的提升應用程式的效能,這裡簡單介紹nodejs客戶端操作redis的demo程式
redis裡面總共可以儲存5種資料型別,分別是字串,列表、集合、雜湊、有序集合;這裡將會對這5種資料型別的增刪查改一一處理;
1、redis在mac上的安裝
https://redis.io/download,當前我用的版本穩定版本是4.0.9,解壓之後,進入redis-4.0.9目錄,執行make && sudo make install,稍等幾分鐘就可以安裝好;
2、redis服務端啟動
命令列執行 redis-server即可啟動,預設埠是6379;
3、安裝redis-node客戶端
建立redis-node目錄,在該目錄下yarn init -y之後,執行命令:yarn add redis 即可安裝nodejs的redis客戶端,參考文件:https://github.com/NodeRedis/…
4、在redis-node目錄下,終端上執行node,即可在終端上響應式的執行nodejs程式碼,用做測試,下面開始demo程式
首先要建立客戶端,並連線redis伺服器,在執行以下連線客戶端程式碼之前,請確保已經執行了redis伺服器:終端上執行redis-server即可,預設埠6379;
const redis = require(`redis`);
const client = redis.createClient(); //預設連線localhost:6379,具體配置引數可以參考文件https://github.com/NodeRedis/node_redis
如果一切順利,我們就已經建立好了連線redis伺服器的客戶端,後續操作都是在client物件上進行。
一、字串型別
雖然說是字串型別,但是可以儲存的資料包括字串、整數以及浮點數。
var res = client.set(`name`, `abczhijia`, (err, data) => {
console.log(`err: `, err, ` data: `, data);
}); // err: null data: OK,res的值是true
client.get(`name`, (err, data) => {
console.log(`err: `, err, ` data: `, data);
}); // err: null data: abczhijia
為了簡單起見,我們定義一個回撥函式,用於輸出資料:
const cb = (err, data) => {
console.log(`err: `, err, ` data: `, data, ` data type: `, typeof data);
}
下面再針對整數做一個測試:
client.set(`age`, 20, cb); //err: null data: OK data type: string
client.get(`age`, cb); //err: null data: 20 data type: string
可以看出,雖然設定的是整數,輸出來的時候,其實還是字串,所以如果要進行計算,需要自己在回撥函式裡面做轉換
二、列表資料型別
//從右側推入
client.rpush(`friends`, `mike`, `jhon`, cb); //err: null data: 2 data type: number
client.lrange(`friends`, 0, -1, cb); //err: null data: [ `mike`, `jhon` ] data type: object
//從左側推入
client.lpush(`friends`, `sam`, `bob`, cb); //err: null data: 4 data type: number
client.lrange(`friends`, 0, -1, cb); // err: null data: [ `bob`, `sam`, `mike`, `jhon` ] data type: object
//從右側彈出
client.rpop(`friends`, cb); //err: null data: jhon data type: string
//從左側彈出
client.lpop(`friends`, cb); //err: null data: bob data type: string
//列印看看發生了啥
client.lrange(`friends`, 0, -1, cb); // err: null data: [ `sam`, `mike` ] data type: object
//檢視索引位置的值
client.lindex(`friends`, 0, cb); // err: null data: sam data type: string
//對列表進行裁剪
client.rpush(`friends`, `tom`, `bryant`, cb)// err: null data: 4 data type: number
client.ltrim(`friends`, 1, 2, cb); //err: null data: OK data type: string
client.lrange(`friends`, 0, -1, cb); //err: null data: [ `mike`, `tom` ] data type: object
這裡注意,列表的操作可以從右邊rpush推入一個或者多個資料,也可以從左邊lpush推入一個或多個資料;另外,取值的時候,需要指明需要起止位置,如果要獲取整個,可以把結束位置寫成-1。
三、集合資料型別
//往集合ids中加幾個元素
client.sadd(`ids`, 1, 2, cb); //err: null data: 2 data type: number
//檢視集合元素
client.smembers(`ids`, cb); //err: null data: [ `1`, `2` ] data type: object
//從集合中刪除元素
client.srem(`ids`, 2, cb); // err: null data: 1 data type: number
//看看發生了啥
client.smembers(`ids`, cb); //err: null data: [ `1` ] data type: object
//看看集合有多少個元素
client.scard(`ids`, cb); //err: null data: 1 data type: number
//再加幾個元素進去
client.sadd(`ids`, 3, 5, 8, 9); //
//判斷元素是否在集合內
client.sismember(`ids`, 8, cb); // err: null data: 1 data type: number
client.sismember(`ids`, 80, cb); //err: null data: 0 data type: number
四、雜湊資料型別
//往雜湊上新增多組鍵值對
client.hmset(`phone`, `price`, 5888, `name`, `iphonex`, cb); //err: null data: OK data type: string
//檢視多個鍵的值
client.hmget(`phone`, `price`, `name`, cb); //err: null data: [ `5888`, `iphonex` ] data type: object
//檢視鍵值對的數量
client.hlen(`phone`, cb); //err: null data: 2 data type: number
//刪掉其中一個鍵值對
client.hdel(`phone`, `price`, cb); //err: null data: 1 data type: number
//看看price是否還在?
client.hmget(`phone`, `price`, cb); //err: null data: [ null ] data type: object,原來只留下了null
//再加幾個屬性
client.hmset(`phone`, `vendor`, `apple`, `madein`, `china`, cb);
//取出所有的鍵值對
client.hgetall(`phone`, cb); //err: null data: { name: `iphonex`, vendor: `apple`, madein: `china` } data type: object
//取出所有的鍵
client.hkeys(`phone`, cb); //err: null data: [ `name`, `vendor`, `madein` ] data type: object
//取出所有的值
client.hvals(`phone`, cb); //err: null data: [ `iphonex`, `apple`, `china` ] data type: object
//判斷鍵是否存在
client.hexists(`phone`, `name`, cb); //err: null data: 1 data type: number
client.hexists(`phone`, `price`, cb); //err: null data: 0 data type: number
五、有序集合資料型別
有序集合會複雜一點,但是可以完成很好的應用程式效果,未完待續…
如有紕漏,請留言指正,謝謝,程式碼在我的github賬號上:https://github.com/abczhijia/…
參考資料:
- https://github.com/NodeRedis/…
- 《redis實戰》