問redis和memcached的區別
一、持久化的區別
redis能夠用來存儲(storge),而memcached用來緩存(cache)
redis的存儲是實實在在的存儲在硬盤上的,而memcached只是存儲在內存中,斷電即銷燬
二、存儲數據的」結構「
redis支持字符串、鏈表、哈希結構、集合、有序集合,而memcached只有1種類型就是「字符串」mysql
相對的,redis支持的方法也多,相對memcached來講學習起來,也比memcached要稍微複雜一點點。redis
redis的事務處理
redis是單進程的程序,故對數據操做事務是加入隊列中,最後exec提交sql
redis> set wang 200
redis> set zhao 700緩存
redis> multi 開啓事務
redis> decrby zhao 100 減掉zhao的100
redis> incrby wang 100 加上wang的100
redis> exec 執行事務
redis> discard 清除隊列中的命令memcached
若是事務中間加入錯誤的命令,redis報錯,事務將會被取消掉
注意:命令是被加入隊列中,挨個執行,可是其中一句語法正常,可是業務錯誤,例如,sadd wang hello,這樣,這句的上一句執行成功,這一句執行失敗,不能保證業務數據的一致性,也就是說,不支持mysql那種的回滾,只支持取消隊列中的命令學習
執行事務時,要注意加鎖,避免真正在exec執行隊列中的命令時,操做的數據已被修改
悲觀鎖:先給數據(ticket)上鎖,只有我能操做
樂觀鎖:監視數據,看有沒有人修改數據(ticket)就好了,exec的數據修改,那麼就取消事務便可。隊列
Redis的事務中,啓用的是樂觀鎖,只負責監測key沒有被改動
------》watch命令
multi以前,先監控數據
redis> watch ticket
redis> multi 開啓事務
....
...
redis> exec 執行事務
假如數據(ticket)被修改了,執行exec就返回(nil)
redis> watch key1,key2,key3 監視多個key,其中一個數據被修改,全部的都取消
取消監視 unwatch進程