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);
});
参考
标签:常用,myhash,myset,redis,key,integer,操作,foo 来源: https://www.cnblogs.com/everlose/p/12810270.html