node.js中對 redis 的安裝和基本操做

1、win下安裝redisphp

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

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

而後打開命令行工具,進入到該目錄下,運行安裝redis服務。mysql

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

而後就能夠啓動redis服務了git

redis-server --service-start

  

2、redis可視化工具RedisDesktopManagergithub

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

如今已經難免費了,能夠下載早期版本。redis

 

3、redis的數據類型sql

一、字符串,最基本的類型,一個key對應一個value。npm

//設置值
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

二、哈希值,是一個鍵值對的集合,一個字符串類型的field和value的映射表,適合存儲對象windows

//設置單個值
hset person name xiao

//設置多個值
hmset person age 24 height 172

//獲取單個值
hget person name

//獲取多個值
hmget person age height

//獲取全部值
hgetall person

//刪除鍵
hdel person name

//獲取全部的鍵
hkeys person

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

//往列表左邊插入
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

四、集合,是字符串類型的無序集合

//添加元素
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

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

//添加有序成員
zadd xiaoxu 60 math 77 english 80 chinaese

//獲取有序成員數量
zcard xiaoxu

//查看有序集合
zrange xiaoxu 0 -1

//查看有序集合,顯示分數
zrange xiaoxu 0 -1 withscores

//刪除有序集合中的成員
zrem xiaoxu math

  

4、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', 'xiaoxu', 'age', '25', function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});

client.hmget('person', 'name', 'age', function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
});

client.hkeys('person', function (err, result) {
    if (err) {
        console.log(err);
    }
    result.forEach(function (value) {
        client.hget('person', value, function (err, 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', 'name', 'xiaoxu', 'age', '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();
})();

  

5、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);

  

6、redis事務

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

discard能夠取消事務,放棄執行事務塊內的全部命令。

const redis = require('redis');

let client = redis.createClient(6379, '127.0.0.1');

client.multi()
.hset('person', 'name', 'haohao')
.hset('person', 'age', '34')
.exec(function (err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result);
    client.quit();
});

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

相關文章
相關標籤/搜索