刚换工做不久,这段时间主要的工做就是开发 Nodejs,用了不少 redis。随便聊聊 Redis 一些使用经验,若是有不妥或者错误之处,欢迎指正。html
Redis 自身的特点:redis
先说说第四点,若是如今忽然重启 redis,redis 里面还会有数据,可是这些数据是 redis 重启前最后一次写入硬盘的数据,也就是存在着数据过时的状况。因此能够了解下强制 BGSAVE 后重启这样。sql
参考文章: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 会远超过六次。nosql
了解下 Hash 结构的操做,会发现 HINCRBY 和 HINCRBYFLOAT 这样能够直接针对 HASH 的键值进行增减的操做。上面的代码就能够简化成:memcached
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。code