nodejs使用redis

Redis 常用于跨进程、跨服务器的数据缓存服务,如:使用Redis存储Session会话数据等。
Node.js 中了连接Redis要使用redisnode_redis)模块,该模块是一个完整的、功能丰富的Node.js Redis 客户端,它支持所有Redis命令且注重于高性能特征。

模块安装:npm install redis

redis的连接和断开

连接redis

使用createClient()来创建redis连接

1
2
3
4
5
6
const client = redis.createClient({
host: 'localhost',
port: 6379,
password: 'password',
db: 1 //设置后会在连接时执行select命令连接到指定数据库
});

断开连接

  • redis.quit() - 退出
    发送QUIT命令,并在命令处理结束后断开连接。如果这时进行重连,则会在结束后重新连接。

  • redis.end(flush) - 强制断开
    强制断开Redis服务器的连接。注意,这个方法不会等待所有的回复被解析,如果你想优雅的退出,就应该使用上面的redis.quit()方法。
    flush命令用于设置其它命令的处理方式。如果不关心其它命令,应该设置为true;如果希望其它命令静默失败,应该设置为false
    在生产环境中,一般不应将redis.end()方法的flush设置为true

操作redis

string类型

  • client.set(key, value, function (err, replay){}) - 设置值
  • client.get(key, function(err,value){} - 获取值,如果没有设置则返回null

hash类型

Hash数据结构即数据存储为field、value的格式存储,可以将field、value看成一对键值对结构

  • client.hmset(key, obj, callback) 通过一个对象设置多个值
    1
    2
    3
    4
    client.hmset('test',{
    'key1':'value1',
    'key2': 'value2'
    })
  • client.hgetall(key, callback)HGETALL命令中返回的响应信息,会被node_redis转换为一个JavaScript对象
    1
    2
    3
    client.hgetall('test', (err, result) =>{
    console.log(result)
    })
    结果为:{ field1: 'value1', field2: 'value2' }
  • client.hset(key, field, value, callback) 设置单一值
  • client.hget(key, field, callback)获取单一值
  • client.hkeys(key, callback) 获取所有field
    返回类型为数组

list类型

列表用于储存多个有序的字符串,列表是一种比较灵活的数据结构,可以充当栈和队列的角色

  • lpush(key, values, callback) 在key列表中list中添加元素,每个新的元素都添加到列表的最左边
    1
    2
    client.lpush('test', 1,2,3)
    // 保存顺序为3,2,1
    类似的:rpush(key, values, callback) 表示从右向左添加元素
  • lpushx(key, values, callback 在key对应的list中添加元素,只有key已经存在时,值添加到列表的最左边
    类似的:rpushx(key, values, callback) 表示从右向左添加元素
  • len(key, callback) 获取key列表中元素个数
  • lpop(key, callback)在key对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
    类似的,rpop(key, callback) 表示从右向左操作
  • lset(key, index, value, callback) 对key对应的list中的某一个索引位置重新赋值
  • ltrim(key, start, stop, callback) 删除索引位置从start到stop的元素
  • lrem(key, count, value, callback 删除count数量的值为value的元素
    count:要删除的元素数量
    • count=0, 删除列表中所有值为value的元素
    • count=2, 从前往后,删除2个元素
    • count=-2,从后往前,删除2个元素

      set类型

      Set集合就是不允许重复的列表

  • sadd(name,values,callback) 网name对应的集合中添加元素
  • scard(name, callback) 获取name对应的集合中元素个数
  • srandmember(name, numbers, callback)从name对应的集合中随机获取 numbers 个元素
  • srem(name, values, callback) 在name对应的集合中删除某些值

公共可用操作

  • exists(key, callback) 检测redis中是否存在key
  • del(key, callback) 删除redis中任意类型数据
  • type(key, callback) 获取key所对应的类型

使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const redis = require("redis");

const client = redis.createClient();
// 不使用默认连接方式时,使用如下方式创建客户端:
// const client = redis.createClient({host:'localhost', port:6379, password:'myPassword'});

// 如果想要选择第3个而不是第0个(默认)的数据库,调用方式如下:
// client.select(3, function() { /* ... */ });

client.on("error", function (err) {
console.log("Error " + err);
});

client.set("string key", "string val", redis.print);
client.hset("hash key", "hashtest 1", "some value", redis.print);
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) {
console.log(replies.length + " replies:");
replies.forEach(function (reply, i) {
console.log(" " + i + ": " + reply);
});
client.quit();
});
文章作者: Dar1in9
文章链接: http://dar1in9s.github.io/2020/05/19/node/nodejs使用redis/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Dar1in9's Blog