nodejs

yarn add ioredis

基本使用

// db.js
const Redis = require('ioredis')

const redis = {
    port: 6379,
    host: 'localhost',
    family: 4,
    db: 0
}

module.exports = new Redis(redis)
  • 查看所有
redis.keys('*').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除指定key
redis.del('test').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除所有
redis.flushall().then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 查看类型
redis.type('test').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 设置键有效期
redis.expire('test', 60).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

字符串

  • 普通设置
const redis = require('./redis/db')

redis.set('test', 'haha').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 设置并加过期时间
redis.set('exp', '123', 'EX', 60).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
redis.setex('exp2', 60, '过期时间60').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 追加
redis.append('str', 'xixi')then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取值
redis.get('str').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 设置每次加1
redis.incr('num').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

列表

  • 列表右侧增加值
redis.rpush('arr', 'a').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 列表左侧增加值
redis.lpush('arr', 'b').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 右侧删除值
redis.rpop('arr').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 左侧删除值
redis.lpop('arr').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除指定元素
// 参数
// key count value
// 将列表中前count次出现的值为value的元素移除
// count > 0: 从头往尾移除
// count < 0: 从尾往头移除
// count = 0: 移除所有
redis.lrem('arr', 0, 'mk1').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取值
redis.lrange('arr', 0, 2).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 在指定元素的前或后插⼊新元素
// key before 或 after 现有元素 新元素
redis.linsert('arr', 'BEFORE', 'mk0', 'mankeng').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 设置指定索引位置的元素值
redis.lset('arr', 0, 'mq').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

无需集合

  • 设置
redis.sadd('s', '无序集合').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除
redis.srem('s', '无序集合').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取值
redis.smembers('s').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

有序集合

  • 设置
redis.zadd('ss', [1, 2]).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取
redis.zrange('ss', 0, -1).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除
redis.zrem('ss', '2').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除权重在指定范围的元素
redis.zremrangebyscore('ss', 0, 10).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

哈希

  • 设置
redis.hset('user', 'age', 18, 'name', 'mankeung').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取指定键所有的属性
redis.hgetall('user').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取⼀个属性的值
redis.hget('user', 'name').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取多个属性的值
redis.hmget('user', ['age', 'name']).then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 获取所有属性的值
redis.hvals('user').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
  • 删除
redis.hdel('user', 'age').then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

发布订阅

  • pub.js
const redis = require('./redis/db')

redis.publish('news', 'Hello world!')
redis.publish('music', 'Hello again!')
  • sub.js
const redis = require('./redis/db')

redis.subscribe('news', 'music')

redis.on('message', function (channel, message) {
    // 收到消息 Hello world! from channel news
    // 收到消息 Hello again! from channel music
    console.log('Receive message %s from channel %s', message, channel)
})

// 还有一个是事件叫做`messageBuffer`,和message是一样的
// 返回buffer,替代字符串
redis.on('messageBuffer', function (channel, message) {
    // Both `channel` and `message` are buffers.
})

管道流水线

const redis = require('./redis/db')

const pipeline = redis.pipeline()

pipeline.set('msg', 'mankeung').get('msg').exec().then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})

事务

const redis = require('./redis/db')

const multi = redis.multi()

multi.set('foo').set('foo', 'new value').exec().then(data => {
    console.log(data)
}).catch(err => {
    console.log(err)
})
贡献者: mankueng