# **api**
## **nodeJS 相關 redis api**
### **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|將元素從一個集合移動到另一個集合,并返回是否成功|1/0||smove('src-key', 'dest-key', 'value')|
|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|清空當前數據庫|||
# **使用**
## **創建redis模塊**
在modules內創建RedisModule.js
```
const redis = require("redis");
const client = redis.createClient({
host: "localhost",
port: 6379,
password: "",
});
module.exports = client;
```
## **鏈接redis客戶端**
```
const redisModule = require("./modules/RedisModule");
redisModule.connect();
```
## **測試**
```
const client = require("../modules/RedisModule");
/**
* 存值
*/
// client.set("name1", "zhangsan", (err, res) => {
// console.log(res);
// });
/**
* 取值
*/
const name = client.get("name", (err, res) => {
console.log(res);
});
name.then((res) => {
console.log("res", res);
});
/**
* 刪除值
*/
// client.del("name1", (err, res) => {
// console.log(res);
// });
/**
* 關閉連接
*/
// client.quit();
/**
* 列表
*/
// client.rPush("list", "1", (err, res) => {
// console.log(res);
// });
/**
* 取列表第一個值, 返回這個值,修改原數據
*/
// let first = client.lPop("list", (err, res) => {
// console.log(res);
// });
// first.then((res) => {
// console.log("res", res);
// });
// console.log(first);
/**
* 取列表最后一個值, 返回這個值,修改原數據
*/
// let last = client.rPop("list", (err, res) => {
// console.log(res);
// });
// last.then((res) => {
// console.log("res", res);
// });
/**
* 獲取列表給定范圍的所有值, 這里為0到2, -1表示最后一個值
*/
// let list = client.lRange("list", 0, 2, (err, res) => {
// console.log(res);
// });
// list.then((res) => {
// console.log("res", res);
// });
/**
* SET集合
*/
// 存
// client.sAdd("set", "2", (err, res) => {
// console.log(res);
// });
// 取 全部
// let setList = client.sMembers("set", (err, res) => {
// console.log(res);
// });
// setList.then((res) => {
// console.log("res: ", res);
// });
// 如果給定的元素在集合中,則移除此元素|1/0
// let isMember = client.sRem("set", "3", (err, res) => {
// console.log(res);
// });
// isMember.then((res) => {
// console.log("res", res);
// });
```
執行
```
require("./redis/test");
```
# **封裝**
```
var redis = require("redis");
var client = redis.createClient();
client.on("error", function (err) {
console.log("Error :", err);
});
client.on("connect", function () {
console.log("Redis連接成功.");
});
client.connect();
class db {
set(key, value, expire, callback) {
client.set(key, value, function (err, result) {
if (err) {
console.log(err);
callback(err, null);
return;
}
if (!isNaN(expire) && expire > 0) {
client.expire(key, parseInt(expire));
}
callback(null, result);
});
}
get(key) {
return client.get(key, (err, value) => {
if (err) {
return err;
}
return value;
});
}
del(key) {
client.del(key);
}
client() {
return client;
}
}
module.exports = new db();
/**
* 使用
* const RedisUtil = require("../../util/redis");
* // 取值
* let neme = RedisUtil.get("name");
* neme.then((res) => {
* console.log("res: ", res);
* });
* // 設置
* RedisUtil.set("name", "張三", 60)
* // 刪除
* RedisUtil.del("name");
*/
```