redis在nodejs中的應用

Happi發表於2019-02-16

轉載請註明來源: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/…


參考資料:

  1. https://github.com/NodeRedis/…
  2. 《redis實戰》

相關文章