资讯专栏INFORMATION COLUMN

关于 Redis 的闲扯

546669204 / 2523人阅读

摘要:刚换工作不久,这段时间主要的工作就是开发,用了很多。自身的特色所有操作均为原子操作,即不可分割操作。通常为单进程,内部为队列实现,但是由于直接操作内存,所以很快。支持多种数据结构相对。同时还支持这样的事务。

刚换工作不久,这段时间主要的工作就是开发 Nodejs,用了很多 redis。随便聊聊 Redis 一些使用经验,如果有不妥或者错误之处,欢迎指正。

Redis 自身的特色:

所有操作均为原子操作,即不可分割操作。

通常为单进程,内部为队列实现,但是由于直接操作内存,所以很快。

支持多种数据结构(相对memcached)。

默认有定时写入硬盘功能。

等等(参考http://blog.nosqlfan.com/html/3537.html)

先说说第四点,如果现在突然重启 redis,redis 里面还会有数据,但是这些数据是 redis 重启前最后一次写入硬盘的数据,也就是存在着数据过期的情况。所以可以了解下强制 BGSAVE 后重启这样。

参考文章:http://redis.readthedocs.org/en/latest/topic/persistence.html

前面三个就用这次的项目来聊聊,这次的业务主要是针对高并发下的抽奖。先看一段代码:

redis.hmget("user_xxxx", "draw_time", function (err, draw_time){
    if(!err && draw_time < 6){
        doSomething();
        redis.hmset("user_xxxx", "draw_time", draw_time + 1, doSomethingElse);
        return;
    }
    ...
});

如果现在同时有 1000 个请求同时过来,很有可能在第一个请求执行 hmset 成功前有其他很多的请求会过来,因为此时draw_time很有可能还是0,那针对该用户的 doSomething 会远超过六次。

了解下 Hash 结构的操作,会发现 HINCRBY 和 HINCRBYFLOAT 这样可以直接针对 HASH 的键值进行增减的操作。上面的代码就可以简化成:

redis.hincryb("user_xxx", "draw_time", 1, function (err, draw_time){
    if(!err && draw_time < 7){
        doSomething();
        return;
    }
    ...
});

当然,redis 还有其他很多很方便的操作,例如针对 String 类型的增减,以及 LIST 的 POP 这样的类型。同时 redis 还支持 multi 这样的事务。

先说这么多,总之用的越多越喜欢 redis。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/36050.html

相关文章

  • JS+CSS3 360度全景图插件 - Watch3D.js

    摘要:日常闲扯从上一篇文章到这篇中间快过了一年了,时间真滴过得快。不是在下中间没想过写新的文章,而是自己确实变懒了体重。。。。。如果有人碰到过类似的问题并且找到了解决办法的话,强烈欢迎留言或者私信,毕竟本人还是想写个完整的插件的。 日常闲扯 从上一篇文章到这篇中间快过了一年了,时间真滴过得快。不是在下中间没想过写新的文章,而是自己确实变懒了(体重+1 +1 +1 +1....) 。。OTL...

    lpjustdoit 评论0 收藏0
  • JS+CSS3 360度全景图插件 - Watch3D.js

    摘要:日常闲扯从上一篇文章到这篇中间快过了一年了,时间真滴过得快。不是在下中间没想过写新的文章,而是自己确实变懒了体重。。。。。如果有人碰到过类似的问题并且找到了解决办法的话,强烈欢迎留言或者私信,毕竟本人还是想写个完整的插件的。 日常闲扯 从上一篇文章到这篇中间快过了一年了,时间真滴过得快。不是在下中间没想过写新的文章,而是自己确实变懒了(体重+1 +1 +1 +1....) 。。OTL...

    wenzi 评论0 收藏0
  • 变量提升考试题

    摘要:看了几道变量提升的小题想分享给大家,都很简单,我这里就不解释原因了。因为被转换为的问题调用的只不过是转换的前后顺序不同 看了几道变量提升的小题想分享给大家,都很简单,我这里就不解释原因了。 我们先说一下预编译的过程 创建AO对象 找形参和变量声明,放入AO中,值为undefined 形参实参相统一 找函数声明,给AO中相应的的对象赋函数体 下面我们来看几个题: 1. con...

    jerryloveemily 评论0 收藏0
  • Web技术前世今生(三)

    摘要:前言我是,如果你还不认识我,不妨先看看技术的前世今生一,以及技术的前世今生二前面我提过,我的大哥有一个叫的死党,这家伙有事没事经常上我们家串门。时间来到了年,在那前后发生了两件事让我印象深刻。传送门技术的前世今生一技术的前世今生二 前言:我是JavaScript,如果你还不认识我,不妨先看看《Web技术的前世今生(一)》,以及《Web技术的前世今生(二)》 前面我提过,我的大哥HTML...

    Wuv1Up 评论0 收藏0
  • 五环之歌之PHP分页

    摘要:根据以往的经验,对于很多初学者,分页功能实现起来还是有一定的困难的,为了帮大家解决这样的问题特此献上五环之歌。正式进入千锋五环之歌之步骤实现分页功能。 根据以往的经验,对于很多初学者,分页功能实现起来还是有一定的困难的,为了帮大家解决这样的问题:特此献上五环之歌。从此分页功能便是如小妹一样简练,漂亮,精干。哈哈,不闲扯了。正式进入千锋PHP五环之歌之步骤实现分页功能。第一环:计算总的记...

    未东兴 评论0 收藏0

发表评论

0条评论

546669204

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<