redis命令集合

252 阅读2分钟

文档

ioredis-github ioredis-gitee 博客园命令大全

特性

keys

KEYS命令会引起阻塞,这个会造成数据库崩溃,接连导致其他的业务崩溃,在生产环境禁用!!! 应该用 scan 替代

# 查找以 runoob 为开头的 key
KEYS runoob*

scan

掘金小册 博客园参考案例

# 复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;
# 提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hint,返回的结果可多可少;
# 同 keys 一样,它也提供模式匹配功能;
# 服务器不需要为游标保存状态,游标的唯一状态就是 scan 返回给客户端的游标整数;
# 返回的结果可能会有重复,需要客户端去重复,这点非常重要;
# 遍历的过程中如果有数据修改,改动后的数据能不能遍历到是不确定的;
# 单次返回的结果是空的并不意味着遍历结束,而要看返回的游标值是否为零;

scan 0 match key99* count 1000
scan 13976 match key99* count 1000

过期时间

redis过期时间

# 同时获取值和过期时间 /Users/liujunyang/work/xuetang/egg-web/app/middleware/session/store/store_redis.js
let sidkey = `${this.SESSION_PRE}${sid}`
      // let result = await this.store.get(sidkey);

      // 有值 [ [ null, '1' ], [ null, 17 ] ]
      // 无值 [ [ null, null ], [ null, -2 ] ]
      let arr = await this.store
                          .pipeline()
                          .get(sidkey)
                          .ttl(sidkey)
                          .exec();

      let session_data = arr[0][1]
      let ttl = arr[1][1]
      
# 设置过期时间
let sidkey = `${this.SESSION_PRE}${sid}`
await this.store.expire(sidkey, maxAge)

db

# 选择 db库
redis 127.0.0.1:6379> select 8

zset

掘金小册 zset 是有序集合。 查询一般用 zrange 即可,而且是按分数从小到大的顺序排列的。 而 zrangebyscore 是按分值为区间查的,有点诡异,暂时不要用,等回头查完更多文档再来补充这里。

# 往名为 books 的有序集合增加一本叫 "think" 的书,分数为9分 
zadd books 9 "think"

# 按 score 排序列出,并带上分数参数区间为排名范围
zrange books 0 -1 withscores

# 按 score 逆序列出,参数区间为排名范围
zrevrange books 0 -1 withscores

# zincrby 的东西不存在时,相当于 zadd,所以不用先zadd
# zadd 能覆盖之前已经存在的元素的分数
# /Users/liujunyang/work/xuetang/egg-activity/app/service/activity.js
# zset 有序集合操作 zincrby zrange
let res = await app.redis.zincrby(nvshengstatuskey, isup ? 1 : -1, id);
let res = await app.redis.zrange(nvshengstatuskey, 0, -1, 'WITHSCORES');

# set 集合操作 sadd srem smembers
let action = isup ? 'sadd' : 'srem'
await app.redis[action](userUpList, id);
let ups = await app.redis.smembers(userUpList);