一、redis與memcache的區(qū)別
1蔬顾、redis不僅支持k/v類型的數(shù)據(jù)宴偿,同時(shí)還提供了list湘捎,set,zset窄刘,hash數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)窥妇。
2、redis支持集群化娩践,即master-slave模式的主從復(fù)制
3活翩、redis支持?jǐn)?shù)據(jù)的持久化,可將內(nèi)存數(shù)據(jù)保存在磁盤中翻伺,重啟的時(shí)候可以再次加載進(jìn)行使用
4材泄、Redis能夠替代memcached,讓你的緩存從只能存儲(chǔ)數(shù)據(jù)變得能夠更新數(shù)據(jù)吨岭,因此你不再需要每次都重新生成數(shù)據(jù)了拉宗。
redis底層使用hash表的方式來存儲(chǔ)k/v對(duì),保證可以快速查詢到相應(yīng)的key值
二辣辫、Redis各類型的應(yīng)用
- string
此類型和memcache相似旦事,作為常規(guī)的key-value緩存應(yīng)用。
例如微博數(shù)络它、粉絲數(shù)等
注:一個(gè)鍵最大能存儲(chǔ)512MB - hash
redis hash是一個(gè)string類型的field和value的映射表族檬,hash特別適合用于存儲(chǔ)對(duì)象(應(yīng)為對(duì)象可能會(huì)包含很多屬性)
常用命令:hget hset hgetall
主要用來存儲(chǔ)對(duì)象信息
- list
list列表是簡單的字符串列表歪赢,按照插入順序排序(內(nèi)部實(shí)現(xiàn)為LinkedList)化戳,可以選擇將一個(gè)鏈表插入到頭部或尾部
常用命令 :lpush(添加左邊元素),rpush,lpop(移除左邊第一個(gè)元素),rpop,lrange(獲取列表片段,LRANGE key start stop)等埋凯。
應(yīng)用場景:Redis list的應(yīng)用場景非常多点楼,也是Redis最重要的數(shù)據(jù)結(jié)構(gòu)之一,比如twitter的關(guān)注列表白对,粉絲列表等都可以用Redis的list結(jié)構(gòu)來實(shí)現(xiàn)掠廓。 - set
案例:在微博中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中甩恼,將其所有粉絲存在一個(gè)集合蟀瞧。Redis還為集合提供了求交集、并集条摸、差集等操作悦污,可以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好钉蒲、二度好友等功能切端,對(duì)上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中顷啼。 - zset
常用命令:zadd,zrange
實(shí)現(xiàn)方式:Redis sorted set的內(nèi)部使用HashMap和跳躍表(SkipList)來保證數(shù)據(jù)的存儲(chǔ)和有序踏枣,HashMap里放的是成員到score的映射昌屉,跳躍表按score從小到大保存所有集合元素。使用跳躍表的結(jié)構(gòu)可以獲得比較高的查找效率茵瀑,并且在實(shí)現(xiàn)上比較簡單间驮。時(shí)間復(fù)雜度與紅黑樹相同,增加马昨、刪除的操作較為簡單蜻牢。
輸入方式
應(yīng)用場景:排行榜
zadd key score member