剛換工做不久,這段時間主要的工做就是開發 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