Redis bgsave & setnx & zset

bgsave & save

redis的数据库备份命令, 区别是阻塞:

save会阻塞主线程, 锁定当前内存中的数据库写入磁盘, save期间redis无法处理外部命令, 直到写入完成

bgsave也会阻塞主线程, 只不过阻塞时间短一点, 它的逻辑是先把当前内存数据库复制一份(fork), 复制完了, 原来的数据库就能继续正常工作了, 而把fork出来的拷贝写入磁盘. 网上有说法, 把fork误认成进程的fork, 这是错的.

 

SETNX

redis可以借助这个命令实现锁, setnx = SET if Not eXists 即如果这个变量不存在就赋值, 已经存在不会赋值.  命令在设置成功时返回 1 , 设置失败时返回 0.

借助这个命令, 可以对某个变量加锁, 其他程序要修改这个变量要取决于setnx的返回结果(EX表示expire秒数, 防止锁忘了释放)

setnx lockid 123 EX 10

 

Sorted Set & 延时队列

普通消息队列使用 redis的list数据结构就行了

延时队列用 sorted set (又称 zset) 来实现,  sorted set 有两个值, 一个是score, 一个是member, 整个set 按照 score来排序

用sorted set来实现延时消息队列: 把消息的时间戳当作score, 消息本身作为 member, 利用 ZRANGEBYSCORE 命令只取延时以后的(比如当前时间5秒前的)消息已达成延时的效果.

参考: https://redis.readthedocs.io/en/2.4/sorted_set.html

posted @ 2019-02-12 10:40  爱知菜  阅读(5)  评论(0编辑  收藏  举报