Skip to content

redis — Redis 客户端 ​

redis 模块提供了 Redis 缓存操作功能,支持 String、Hash、List、Set、ZSet 等数据结构。

引入方式 ​

javascript
var redis = require("redis")

String 操作 ​

Get / Set ​

javascript
redis.Set("key", "value", 3600)  // 设置,过期时间 3600 秒
var val = redis.Get("key")       // 获取

SetNX — 仅当不存在时设置 ​

javascript
var ok = redis.SetNX("lock", "1", 30)  // 返回 bool

MGet / MSet — 批量操作 ​

javascript
redis.MSet("key1", "val1", "key2", "val2")
var vals = redis.MGet("key1", "key2")

Incr / Decr — 自增自减 ​

javascript
redis.Incr("counter")          // +1
redis.Decr("counter")          // -1
redis.IncrBy("counter", 10)    // +10
redis.DecrBy("counter", 5)     // -5

其他 ​

javascript
redis.Append("key", "suffix")
redis.StrLen("key")
redis.GetSet("key", "newVal")  // 设置新值,返回旧值

Key 操作 ​

javascript
redis.Del("key1", "key2")           // 删除
redis.Exists("key")                 // 是否存在
redis.Expire("key", 3600)           // 设置过期时间(秒)
redis.Persist("key")                // 移除过期时间
redis.TTL("key")                    // 剩余生存时间
redis.Type("key")                   // 值类型
redis.Keys("user:*")                // 按模式查找
redis.Rename("oldKey", "newKey")    // 重命名

Hash 操作 ​

javascript
redis.HSet("user:1", "name", "张三", "age", 25)
redis.HGet("user:1", "name")           // "张三"
redis.HGetAll("user:1")                // {name: "张三", age: "25"}
redis.HDel("user:1", "age")            // 删除字段
redis.HExists("user:1", "name")        // 字段是否存在
redis.HIncrBy("user:1", "age", 1)      // 字段值 +1
redis.HKeys("user:1")                  // 所有字段名
redis.HVals("user:1")                  // 所有字段值
redis.HLen("user:1")                   // 字段数量
redis.HMGet("user:1", "name", "age")   // 批量获取

List 操作 ​

javascript
redis.RPush("list", "a", "b", "c")     // 尾部插入
redis.LPush("list", "x")               // 头部插入
redis.LPop("list")                     // 弹出头部
redis.RPop("list")                     // 弹出尾部
redis.LLen("list")                     // 列表长度
redis.LRange("list", 0, -1)            // 获取所有元素
redis.LIndex("list", 0)                // 按索引获取
redis.LSet("list", 0, "newVal")        // 按索引设置
redis.LRem("list", 1, "val")           // 移除元素
redis.LTrim("list", 0, 9)              // 保留前 10 个

Set 操作 ​

javascript
redis.SAdd("set", "a", "b", "c")       // 添加成员
redis.SRem("set", "a")                 // 移除成员
redis.SMembers("set")                  // 所有成员
redis.SIsMember("set", "a")            // 是否成员
redis.SCard("set")                     // 成员数量

ZSet(有序集合)操作 ​

javascript
redis.ZAdd("rank", {Score: 100, Member: "user1"}, {Score: 200, Member: "user2"})
redis.ZRem("rank", "user1")
redis.ZRange("rank", 0, -1)                    // 按排名范围获取
redis.ZRangeWithScores("rank", 0, -1)          // 获取成员及分数
redis.ZScore("rank", "user1")                  // 获取分数
redis.ZRank("rank", "user1")                   // 获取排名
redis.ZCard("rank")                            // 成员数
redis.ZIncrBy("rank", 10, "user1")             // 增加分数

Pub/Sub ​

javascript
redis.Publish("channel", "message")    // 发布消息

完整示例 ​

javascript
var redis = require("redis")

// 缓存用户信息
redis.Set("user:1", JSON.stringify({name: "张三", age: 25}), 3600)
var user = JSON.parse(redis.Get("user:1"))

// 计数器
redis.Incr("api:visit:" + request.Path())

// 分布式锁
var locked = redis.SetNX("lock:order:1", "1", 30)
if (locked) {
    // 执行业务逻辑
    redis.Del("lock:order:1")
}

// 排行榜
redis.ZAdd("rank:score", {Score: 95, Member: "张三"})
redis.ZAdd("rank:score", {Score: 88, Member: "李四"})
var top10 = redis.ZRangeWithScores("rank:score", 0, 9)

版权所有.