Node.js Reids

Redis驱动多使用node redis,此模块可搭配官方的hiredis C非阻塞的语言库,比使用JavaScript内置的解释器性能稍好,可选择将hiredis与redis一同安装。

$ npm i redis hiredis

基本用法

//初始化
const redis = require("redis");

//创建客户端
const clientRedis = redis.createClient();
clientRedis.on("error", function(err){
  console.error("ERROR:%s", err);
});

如果在项目中使用redis希望初始化一次后处处可用呢?

  1. 将redis客户端存储到node的全局对象global中
global.redisClient = require("redis").createClient();
  1. 将redis初始化方法封装后exports出去供其它模块require调用
const redis = require("redis");

const config = {};
config.host = "127.0.0.1";
config.port = 6379;

const redisClient = redis.createClient(config.port, config.host);

redisClient.on("connect", function(opts){
    console.log("redis client connect");
});

redisClient.on("error", function(err){
    console.error("redis client on error: %s", err);
});

//monitor事件可以监听到redis接收到的所有客户端命令
redisClient.monitor(function(err, res){
    console.log("redis client monitor: ", res);//ok
});

redisClient.on("monitor", function(time, args){
   console.log("redis client on monitor:", time, args);
});

module.exports = redisClient;

创建客户端

const redis = require("redis");
const redisClient = redis.createClient(config);

创建客户端可以设置的参数

参数描述
port端口,默认为6379
host主机地址,默认127.0.0.1
path主机地址:端口
family协议族,可选IPv6或IPv4
max_attempts连接最长尝试次数
retry_max_delay-
socket_nodelay-
socket_keepalive-
return_buffers-
detect_buffers-
connect_timeout60 * 60 * 1000 ms
enable_offline_queue-
password认证密码
auth认证用户名
db默认选取的数据库索引

Redis没有严格意义上的表名和字段名,而是以Key-Value键值对的方式。因此一般采用schema:key的形式作为键名,其中schema可理解为传统意义上数据库表命,而key可认为是表中的主键。

例如:使用redis存放session的键名

sessionid:i4w3axuzyj4nwwg75y6k5us2

Redis支持对键名进行索引,但不支持对键名所存放的Hash Key进行索引。

例如:检索所有session

redisClient.keys("session:*", function(err, keys){
  console.log(err, keys);
});

Redis的一个key键名可以对应一个String字符串类型的值,也可以是hashes、lists、sets、sorted sets、bitmaps等。

键名key

命令描述
> KEYS pattern查找所有符合给定pattern模式的key
> TYPE key获取指定key所存储值的类型
> TTL key以秒为单位获取指定key的剩余生存时间(TTL,time to live)
> PTTL key以毫秒为单位获取指定key的剩余过期时间
> DUMP key序列化给定key并返回序列化后的值。
> EXISTS key检查给定key是否存在
> DEL key删除key
> MOVE key db将当前数据库索引中的key移动到指定数据库中
> EXPIRE key seconds为给定的key设置过期秒数时间
> EXPIREAT key timestamp为给定的key设置秒级的过期UNIX时间戳
> PEXIRE key milliseconds为给定的key设置毫秒级的过期时间
> PEXIREAT key millisecond-timestamp为给定的key设置毫秒级的过期时间戳
> PERSIS key移除key的过期时间,key将持久保存。
> RANDOMKEY从当前数据库中随机获取一个key
> RENAME oldkey newkey为指定的oldkey进行重命名
> RENAMENX oldkey newkey当newkey不存在时为old进行重命名
方法描述
redisClient.keys(pattern, function(error, result){});获取指定形式的所有键名

字符串string

  • 字符串类型最大长度为512MB
命令描述
SET key value设置指定key的值
GET key获取指定key的值
MSET key value[key value...]同时设置一个或多个键值对
MGET key[key...]获取所有一个或多个给定key的值
INCR key将key中的存储的数字值增加1
DECR key将key中存储的数字值减少1
INCRBY key increment将key所存储的数值增加给定的增量值(increment)
DECRBY key decrement将key所存储的数值减去给定的减量值(decrement)
STRLEN key获取key所存储的字符串的长度
APPEND key value若key存在且是字符串则将指定的value值追加到key原来值得末尾
方法描述
redisClient.set(key, value, function(error, result){})设置字符串
redisClient.get(key, function(error, result){})获取字符串对应的值
redisClient.incr(key, function(error, result){})将 key 中储存的数字值增一
redisClient.decr(key, function(error, result){})将 key 中储存的数字值减一
redisClient.mset(key, value, function(error, result){})设置多个字符串
redisClient.mget(key, function(error, result){})获取多个字符串对应的值

例如:

redisClient.set("aid", 300, function(err, obj){
     console.log(err, obj);//null 'OK'
});
redisClient.get("aid", function(err, obj){
     console.log(err, obj);//null '300'
});
redisClient.incr("aid", function(err, obj){
     console.log(err, obj);//null 301
});
redisClient.decr("aid", function(err, obj){
     console.log(err, obj);//null 300
});

哈希hash

  • 哈希适合存储对象
  • Redis哈希是一个字符串类型的字段和值的映射表
  • Redis中每个哈希可存储2的32次方减1个键值对约40多亿
命令描述
> HSET key field value将哈希表key中字段为field的值设置为value
> HSETNX key field value当哈希表key中字段为field的值不存在时设置其值为value
> HGET key field获取哈希表key中字段为field的值
> HDEL key field[field...]删除哈希表key中一个或多个字段
> HLEN key获取哈希表key中字段的数量
> HEXISTS key field判断哈希表key中是否存在field字段
> HKEYS key获取哈希表key中所有的字段
> HVALS key获取哈希表key中所有的字段值
> HGETALL key获取哈希表key中所有字段和值
>HINCRBY key field increment将哈希表key中指定field字段名的值增加increment
>HINCRBYFLOAT key field increment将哈希表key中field字段的浮点数值增加increment

列表List

  • Redis列表是字符串列表会按照插入顺序进行排序
  • Redis列表是有序的列表元素是可以重复的
  • Redis列表可将元素添加到列表的左侧头部或右侧尾部
  • Redis列表可容纳2的32次方减1约40亿个元素
命令描述
> LLEN key获取列表key的元素个数
> LSET key index value设置列表key中索引为index的value值
> LINDEX key index获取列表key中索引为index的值
> LRANGE key start stop获取列表key中指定起止索引范围内的元素
> LPUSH key value1 [value2]将一个或多个值插入列表头部
> LPUSHX key value将一个值插入到已存在的列表头部
const min = 100000;
const max = 1000000;
const id = min + Math.round((max - min) * Math.random());
redisClient.lpush("aid_list", id, function(error, result){
     console.log(error, result);//null 1
});

集合set

  • Redis的集合是字符串类型的无需集合
  • Redis的集合成员是唯一的,集合中不能出现重复的数据。
  • Redis的集合是通过哈希表实现的,添加、删除、查找的复杂度都是O(1)。
  • Redis的集合最大成员数是2的32次方减1约40亿
命令描述
> SADD key member1 [member2]向集合添加一个或多个成员
> SISMEMBER key member判断member元素是否为集合key的成员
> SPOP key移除并返回集合中的一个随机元素

例如:向集合中循环插入随机编号获得具有唯一编号的集合

const min = 100000;
const max = 1000000;
const id = min + Math.round((max - min) * Math.random());
redisClient.sadd("aid_set", id, function(error, result){
  console.log(error, result);//null 1
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值