1. 程式人生 > 程式設計 >node.js中 redis 的安裝和基本操作示例

node.js中 redis 的安裝和基本操作示例

本文例項講述了node.js中 redis 的安裝和基本操作。分享給大家供大家參考,具體如下:

一、win下安裝redis

https://github.com/MicrosoftArchive/redis/releases

下載Redis-x64-3.2.100.zip,然後解壓,放到自定義目錄。

然後開啟命令列工具,進入到該目錄下,執行安裝redis服務。

redis-server.exe --service-install redis.windows-service.conf --loglevel verbose

然後就可以啟動redis服務了

redis-server --service-start

二、redis視覺化工具RedisDesktopManager

https://github.com/uglide/RedisDesktopManager/releases

現在已經不免費了,可以下載早期版本。

三、redis的資料型別

1、字串,最基本的型別,一個key對應一個value。

//設定值
set name xiaoxu
//獲取值
get name
//獲取子字串,包含開始和結束索引的字元
getrange name 0 -1
getrange name 1 3
//自增加1
set age 1
incr age
//指定增加的數量
incrby age 5
//遞減1
decr age
//指定遞減的數量
decrby age 3
//刪除指定的鍵
del age
//判斷鍵是否存在
exists name
//設定過期時間,單位秒
expire name 10
//檢視剩餘生存時間
ttl name
//獲取鍵的值型別
type name

2、雜湊值,是一個鍵值對的集合,一個字串型別的field和value的對映表,適合儲存物件

//設定單個值
hset person name xiao
//設定多個值
hmset person age 24 height 172
//獲取單個值
hget person name
//獲取多個值
hmget person age height
//獲取所有值
hgetall person
//刪除鍵
hdel person name
//獲取所有的鍵
hkeys person

3、列表,簡單的字串列表,按插入順序排序。

//往列表左邊插入
lpush list 1
lpush list 2
//往列表右邊插入
rpush list 3
rpush list 4
//檢視列表元素
lrange list 0 -1
//彈出元素
lpop list
rpop list
//通過索引獲取元素
lindex list 1
//獲取列表的長度
llen list
//刪除列表的元素
//lrem key count value
// count > 0時,從表頭開始搜尋,刪除與value相等的元素,數量為count
// count < 0時,從表尾開始搜尋,刪除與value相等的元素,數量為count絕對值
// count = 0時,刪除列表中所有與value相等的元素
lrem list 1 1
lrem list -1 2

4、集合,是字串型別的無序集合

//新增元素
sadd label 1 2 3
//檢視集合
smembers label
//獲取集合個數
scard label
//刪除元素
srem label 2
//交集
sadd a 1 2 3
sadd b 2 3 4
sinter a b
//差集
sdiff a b
//並集
sunion a b

5、有序集合,跟集合一樣也是字串的集合,不過每個元素會關聯一個double型別的分數,redis通過該分數給集合中的元素進行從小到大的排序。

//新增有序成員
zadd xiaoxu 60 math 77 english 80 chinaese
//獲取有序成員數量
zcard xiaoxu
//檢視有序集合
zrange xiaoxu 0 -1
//檢視有序集合,顯示分數
zrange xiaoxu 0 -1 withscores
//刪除有序集合中的成員
zrem xiaoxu math

四、node.js中使用redis

安裝redis庫

npm install redis --save

操作redis的方法與我們在命令列中輸入的命令基本一致

const redis = require('redis');
//建立一個redis客戶端
let client = redis.createClient(6379,'127.0.0.1');
//操作redis基本跟在命令列操作一致
client.set('name','xiaoxu',function (err,result) {
  if (err) {
    console.log(err);
  }
  console.log(result);
});
client.hmset('person','name','age','25',result) {
  if (err) {
    console.log(err);
  }
  console.log(result);
});
client.hmget('person',result) {
  if (err) {
    console.log(err);
  }
  console.log(result);
});
client.hkeys('person',result) {
  if (err) {
    console.log(err);
  }
  result.forEach(function (value) {
    client.hget('person',value,result) {
      console.log(value,result);
    });
  });
  //退出
  client.quit();
});

通過bluebird來包裝redis,讓它支援async,await的方式,解決多層巢狀問題。

const redis = require('redis');
const bluebird = require('bluebird');
//通過bluebird包裝
bluebird.promisifyAll(redis.RedisClient.prototype);
bluebird.promisifyAll(redis.Multi.prototype);
//建立一個redis客戶端
let client = redis.createClient(6379,'127.0.0.1');
(async function () {
  //方法名後面都加上Async
  let result = await client.setAsync('name','hehe');
  console.log(result);
  result = await client.hmsetAsync('person','25');
  console.log(result);
  result = await client.hkeysAsync('person');
  console.log(result);
  result.forEach(async function (value) {
    let v = await client.hgetAsync('person',value);
    console.log(value,v);
  });
  client.quit();
})();

五、redis釋出與訂閱

redis釋出訂閱是一種訊息通訊模式,傳送者傳送訊息,訂閱者接收訊息。

const redis = require('redis');
let clientA = redis.createClient(6379,'127.0.0.1');
let clientB = redis.createClient(6379,'127.0.0.1');
//客戶端A訂閱頻道
clientA.subscribe('news');
clientA.subscribe('sports');
//客戶端A監聽訊息
clientA.on('message',function (channel,message) {
  console.log('客戶端A收到',channel,message);
  //客戶端A在10秒後取消訂閱
  setTimeout(function () {
    clientA.unsubscribe('news');
  },10000);
});
setInterval(function () {
  clientB.publish('news','這是一條新聞' + new Date().toLocaleString());
  clientB.publish('sports','這是一條體育' + new Date().toLocaleString());
},1000);

六、redis事務

redis事務可以一次性執行多個命令,multi 命令之後,exec命令之前,命令都會放到佇列中,直到執行exec,將會執行佇列中的命令。

discard可以取消事務,放棄執行事務塊內的所有命令。

const redis = require('redis');
let client = redis.createClient(6379,'127.0.0.1');
client.multi()
.hset('person','haohao')
.hset('person','34')
.exec(function (err,result) {
  if (err) {
    console.log(err);
  }
  console.log(result);
  client.quit();
});

注意redis中的事務跟mysql中的事務是有區別的。

希望本文所述對大家node.js程式設計有所幫助。