Node.js中Redis 的使用

Node.js Redis

基本功能

  • 緩存系統
  • 數據存儲
  • 消息中介

基本工具

  • 服務啓動工具
  • 命令行
  • GUI

PS:在之前,需要安裝redis對Nodejs的支持
https://redis.io/clients#nodejs

$ npm install redis

連接redis代碼

var redis = require('redis');

var client = redis.createClient(6379,'localhost');

client.set('hello','This is a value');

代碼改造一下,利用程序獲取redis中的值

var redis = require('redis');

var client = redis.createClient(6379,'localhost');

client.set('hello','This is a value');

client.get('hello',function (err,v) {
    console.log("redis get hello err,v",err,v);
})

其輸出結果

假設我們把存儲對象改成JSON對象,將會發生什麼樣的結果呢?

var redis = require('redis');

var client = redis.createClient(6379,'localhost');

client.set('hello',{name:"jacky",age:22});

client.get('hello',function (err,v) {
    console.log("redis get hello err,v",err,v);
})

程序將會報錯,因爲redis中存儲的是字符串對象

我們需要重寫toString方法

Object.prototype.toString = function(){
    return JSON.stringify(this);
};

輸出正常:

列表 - List

爲了方便,把連接redis的代碼寫成模塊的方式

client.js

var redis = require('redis');

module.exports = redis.createClient(6379, 'localhost');

其實操作list就是操作雙向鏈表

ar client = require('./client');

//先清除數據
client.del('testLists');
client.rpush('testLists','a');
client.rpush('testLists','b');
client.rpush('testLists','c');
client.rpush('testLists','d');
client.rpush('testLists','e');
client.rpush('testLists','1');

client.lpop('testLists',function (err,v) {
    console.log('client.lpop , err , v : ' , err,v);
})

client.rpop('testLists',function (err,v) {
    console.log('client.rpop , err, v ',err,v);
})

client.lrange('testLists',0.,-1, function (err,lists) {
    console.log('client.lrange , err ,lists: ',err,lists);
})

集合 - Set

var client = require('./client');

client.sadd('testSet', 1);
client.sadd('testSet', 'a');
client.sadd('testSet', 'bb');

//不可重複
client.sadd('testSet', 'bb');

client.smembers('testSet', function(err, v){
    console.log('client.smembers err, v:', err, v);
});

無序不可重複

消息中介

就是redis中的發佈訂閱

訂閱方 sub.js

var client = require('./client');

client.subscribe('testPublish');

client.on('message', function(channel, msg){
  console.log('client.on message, channel:', channel, ' message:', msg);
});

發佈方 pub.js

var client = require('./client');

client.publish('testPublish', 'message from pub.js');

先啓動訂閱發,然後啓動發佈方便可看見現象

 

附:redis數據類型命令彙總

string 字符串

命令                  行爲                                              返回值                     使用示例(略去回調函數)
 set         設置存儲在給定鍵中的值                      OK                         set('key', 'value')
 get         獲取存儲在給定鍵中的值                     value/null          get('key')
 del         刪除存儲在給定鍵中的值(任意類型)    1/0                        del('key')
 incrby  將鍵存儲的值加上整數increment                                         incrby('key', increment)
 decrby  將鍵存儲的值減去整數increment                                         decrby('key', increment)
 incrbyfloat 將鍵存儲的值加上浮點數increment                                incrbyfloat('key', increment)   
 append  將值value追加到給定鍵當前存儲值的末尾                           append('key', 'new-value')
 getrange    獲取指定鍵的index範圍內的所有字符組成的子串            getrange('key', 'start-index', 'end-index')
 setrange    將指定鍵值從指定偏移量開始的子串設爲指定值           setrange('key', 'offset', 'new-string')

list 列表

命令                    行爲                                              返回值                     使用示例(略去回調函數)
 rpush       將給定值推入列表的右端                     當前列表長度      rpush('key', 'value1' [,'value2']) (支持數組賦值)
 lrange  獲取列表在給定範圍上的所有值          array                       lrange('key', 0, -1) (返回所有值)
 lindex  獲取列表在給定位置上的單個元素                                     lindex('key', 1)
 lpop        從列表左端彈出一個值,並返回被彈出的值                     lpop('key')
 rpop        從列表右端彈出一個值,並返回被彈出的值                     rpop('key')
 ltrim       將列表按指定的index範圍裁減                                                ltrim('key', 'start', 'end')

set 集合  

命令                  行爲                                              返回值                     使用示例(略去回調函數)     sadd            將給定元素添加到集合                      插入元素數量      sadd('key', 'value1'[, 'value2', ...]) (不支持數組賦值)(元素不允許重複)
 smembers    返回集合中包含的所有元素                array(無序)           smembers('key')
 sismenber   檢查給定的元素是否存在於集合中 1/0                         sismenber('key', 'value')
 srem            如果給定的元素在集合中,則移除此元素 1/0              srem('key', 'value')
 scad            返回集合包含的元素的數量                                                sacd('key')   
 spop            隨機地移除集合中的一個元素,並返回此元素                spop('key')
 smove           集合元素的遷移                                                                 smove('source-key'dest-key', 'item')
 sdiff           返回那些存在於第一個集合,但不存在於其他集合的元素(差集)   sdiff('key1', 'key2'[, 'key3', ...])   
 sdiffstore  將sdiff操作的結果存儲到指定的鍵中                         sdiffstore('dest-key', 'key1', 'key2' [,'key3...])   
 sinter      返回那些同事存在於所有集合中的元素(交集)               sinter('key1', 'key2'[, 'key3', ...])
 sinterstore 將sinter操作的結果存儲到指定的鍵中                        sinterstore('dest-key', 'key1', 'key2' [,'key3...])  
 sunion      返回那些至少存在於一個集合中的元素(並集)               sunion('key1', 'key2'[, 'key3', ...])
 sunionstore 將sunion操作的結果存儲到指定的鍵中                        sunionstore('dest-key', 'key1', 'key2' [,'key3...])  

hash 散列

命令                  行爲                                              返回值                     使用示例(略去回調函數)
 hset            在散列裏面關聯起給定的鍵值對      1(新增)/0(更新) hset('hash-key', 'sub-key', 'value')    (不支持數組、字符串)
 hget            獲取指定散列鍵的值                                                           hget('hash-key', 'sub-key')
 hgetall     獲取散列包含的鍵值對                      json                        hgetall('hash-key')
 hdel            如果給定鍵存在於散列裏面,則移除這個鍵                 hdel('hash-key', 'sub-key')
 hmset           爲散列裏面的一個或多個鍵設置值 OK                          hmset('hash-key', obj)
 hmget           從散列裏面獲取一個或多個鍵的值 array                       hmget('hash-key', array)
 hlen            返回散列包含的鍵值對數量                                                hlen('hash-key')
 hexists     檢查給定鍵是否在散列中                 1/0                         hexists('hash-key', 'sub-key')
 hkeys           獲取散列包含的所有鍵                      array                       hkeys('hash-key')
 hvals           獲取散列包含的所有值                      array                       hvals('hash-key')
 hincrby     將存儲的鍵值以指定增量增加           返回增長後的值 hincrby('hash-key', 'sub-key', increment) (注:假如當前value不爲爲字符串,則會無輸出,程序停止在此處)
hincrbyfloat    將存儲的鍵值以指定浮點數增加

zset 有序集合

命令                  行爲                                              返回值                     使用示例(略去回調函數)
zadd            將一個帶有給定分支的成員添加到有序集合中                zadd('zset-key', score, 'key') (score爲int)
zrange      根據元素在有序排列中的位置,從中取出元素
zrangebyscore   獲取有序集合在給定分值範圍內的所有元素
zrem            如果給定成員存在於有序集合,則移除
zcard           獲取一個有序集合中的成員數量      有序集的元素個數    zcard('key')

redis其他常用命令彙總

keys命令組
 命令                  行爲                                              返回值                     使用示例(略去回調函數)
 del             刪除一個(或多個)keys           被刪除的keys的數量     del('key1'[, 'key2', ...])
 exists      查詢一個key是否存在                             1/0                     exists('key')
 expire      設置一個key的過期的秒數                       1/0                     expire('key', seconds)
 pexpire     設置一個key的過期的毫秒數                  1/0                     pexpire('key', milliseconds)    
 expireat    設置一個UNIX時間戳的過期時間            1/0                     expireat('key', timestamp)
 pexpireat   設置一個UNIX時間戳的過期時間(毫秒) 1/0                    pexpireat('key', milliseconds-timestamp)
 persist     移除key的過期時間                                  1/0                     persist('key')
 sort            對隊列、集合、有序集合排序       排序完成的隊列等  sort('key'[, pattern, limit offset count])
 
 flushdb     清空當前數據庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章