Redis官方說明
Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. —— redis.io
Redis數(shù)據(jù)結(jié)構(gòu)
字符串(strings):存儲整數(shù)(比如計數(shù)器)和字符串(廢話。。),有些公司也用來存儲json/pb等序列化數(shù)據(jù),并不推薦,浪費(fèi)內(nèi)存。
哈希表(hashes):存儲配置,對象(比如用戶、商品),優(yōu)點(diǎn)是可以存取部分key,對于經(jīng)常變化的或者部分key要求atom操作的適合。
列表(lists):可以用來存最新用戶動態(tài),時間軸,優(yōu)點(diǎn)是有序,確定是元素可重復(fù),不去重。
集合(sets):無序,唯一,對于要求嚴(yán)格唯一性的可以使用,可以用來去重。
有序集合(sorted sets):集合的有序版,很好用,排名之類的復(fù)雜場景可以考慮。
位圖(bitmaps):這個不是新增的數(shù)據(jù)類型,只是可以把字符串類型按照單個位的形式進(jìn)行操作??梢杂脕斫y(tǒng)計活躍用戶,實(shí)現(xiàn)用戶簽到功能,性能頗高。不過統(tǒng)計活躍用戶建議是增量讀取日志或者引入消息中間件異步刷到redis,非業(yè)務(wù)必須功能最好不要影響線上業(yè)務(wù),特別是登錄這種門戶業(yè)務(wù)更是重中之重。
計數(shù)器(hyperloglogs,翻譯待定):如名字,添加元素只記錄元素個數(shù),并不會存儲元素本身,節(jié)省空間并且避免重復(fù)count,這個感覺直接用incr就可以實(shí)現(xiàn)。
地理空間(geospatial indexes):用來做地理位置查詢,比如兩點(diǎn)之間的距離,一個點(diǎn)附近有多少元素,適合點(diǎn)比較固定的場景,或者只考慮當(dāng)前位置的場景,像附近的人這種就不適合,一是需要考慮某段時間內(nèi)的點(diǎn),二是點(diǎn)經(jīng)常更新,壓力比較大。