zoukankan      html  css  js  c++  java
  • Redis 常用操作

    简述

    redis 本身的下载与编译参见官网下载

    js 使用 ioredis 来操作。

    const Redis = require("ioredis");
    
    // 连接
    const redis = new Redis({
      port: process.env.redisPort,
      host: process.env.redisEndpoint,
      password: process.env.redisPW,
    });
    

    对于多数 redis 的命令,js 都有函数来代理操作,其格式如下

    redis[SOME_REDIS_COMMAND_IN_LOWERCASE](ARGUMENTS_ARE_JOINED_INTO_COMMAND_STRING)
    

    举个例子,redis.set("mykey", "Hello") 就等同于 redis> SET mykey "Hello"

    key-value 增删改查

    命令官方文档 GETSET key value

    - SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
    - GET key
    
    redis> GETSET foo "bar" "EX" 10
    OK
    redis> GET foo
    "bar"
    

    用 JS 操作如下

    // js 设置 redis.set("foo", "bar");
    // 等效于命令 redis> SET foo "bar"
    // 返回 promise
    redis.set("foo", "bar");
    
    // 设置并且过期时间是 10 秒
    redis.set("foo", "bar", "EX", 10);
    
    // 支持 callback 模式返回
    redis.get("foo", function (err, result) {
      if (err) {
        console.error(err);
      } else {
        console.log(result); // 结果 bar
      }
    });
    
    // 或者是 then 调用
    redis.get("foo").then(function (result) {
      console.log(result);
    });
    
    // 删除
    redis.del("foo");
    

    无序集合操作

    - SADD key member [member ...]  添加
    - SMEMBERS key  列出成员
    - SCARD key  查看集合的元素数量
    - SCARD key  查看集合的元素数量
    - SPOP key [count]  从集合中推出最近加入的元素
    - SREM key member [member ...]  删除指定元素
    
    redis> SADD myset 7
    (integer) 1
    redis> SADD myset 5
    (integer) 1
    redis> SADD myset 7
    (integer) 0
    redis> SADD myset 6
    (integer) 1
    redis> SCARD myset
    (integer) 3
    redis> SMEMBERS myset
    1) "5"
    2) "6"
    3) "7"
    redis> SPOP myset
    "5"
    
    redis> SREM myset 7
    (integer) 1
    redis> SMEMBERS myset
    1) "6"
    

    简要提几个 js 的操作

    // 下列两种 sadd 效果相同:
    redis.sadd("myset", 1, 3, 5, 7);
    redis.sadd("myset", [1, 3, 5, 7]);
    
    // 查看成员
    // 返回 promise
    redis.smembers("myset")
    
    redis.spop("set"); // Promise resolves to "5" or another item in the set
    

    有序集合

    与之相近的还有 ZADD,这是另外一种有序的集合,具体见 redis官网 ZADD,总之操作举例如下

    > ZADD sortedSet 1 "one"
    > ZADD sortedSet 3 "three"
    > ZADD sortedSet 6 "six"
    > ZADD sortedSet 2 "two"
    
    > ZRANGE sortedSet 0 -1
    1) "one"
    2) "two"
    3) "three"
    4) "six"
    
    // 添加
    redis.zadd("sortedSet", 1, "one", 3, "three", 6, "six", 2, "two", );
    // 相当于 redis> ZRANGE sortedSet 0 -1
    redis.zrange("sortedSet", 0, -1).then((res) => console.log(res));
    

    Hash Map 的操作

    > hset myhash key1 "value1"
    (integer) 1
    > hset myhash key6 "value6"
    (integer) 1
    > hset myhash key2 "value2"
    (integer) 1
    > hget myhash key6
    "value6"
    > hgetall myhash
    1) "key1"
    2) "value1"
    3) "key6"
    4) "value6"
    5) "key2"
    6) "value2"
    
    // myhash 是哈希 map 集名,field1 是 key,Hello 是 value
    redis.hset("myhash", "key1", "value1");
    redis.hget("myhash", "key2").then((res) => console.log(res)); // value2
    redis.hgetall("myhash").then((res) => console.log(res));
    

    其他相关的命令

    HDEL 删除
    HEXISTS 判断某键是否存在
    HGET
    HGETALL
    HKEYS 获取所有键名
    HLEN 判断 hash map 长度
    HSET
    HVALS 获取所有键值
    

    订阅发布

    var Redis = require("ioredis");
    var redis = new Redis();
    var pub = new Redis();
    
    // 同时订阅 news 和 music 两个通道,
    redis.subscribe("news", "music", function (err, count) {
      // `count` represents the number of channels we are currently subscribed to.
        
      // 发布新消息
      pub.publish("news", "Hello world!");
      pub.publish("music", "Hello again!");
    });
    
    // 监听 message 事件。
    redis.on("message", function (channel, message) {
      // Receive message Hello world! from channel news
      // Receive message Hello again! from channel music
      console.log("Receive message %s from channel %s", message, channel);
    });
    

    参考

    redis 官网

    github-ioredis

  • 相关阅读:
    转换方法
    数组去重
    js常见兼容
    封装cookie
    常用函数封装
    手绘 代码
    Python变量和数据类型,类型转换
    语句块的概念及注释符的使用
    ipython和pip,模块安装方法
    第一个python程序
  • 原文地址:https://www.cnblogs.com/everlose/p/12810270.html
Copyright © 2011-2022 走看看