redis數(shù)據(jù)類型和應(yīng)用場(chǎng)景
redis簡介
Redis是當(dāng)前比較熱門的NOSQL系統(tǒng)之一,它是一個(gè)開源的使用ANSI c語言編寫的key-value存儲(chǔ)系統(tǒng)(區(qū)別于MySQL的二維表格的形式存儲(chǔ)剃斧。)庐杨,Redis數(shù)據(jù)都是緩存在計(jì)算機(jī)內(nèi)存中并且它會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件杨何,實(shí)現(xiàn)數(shù)據(jù)的持久化糕篇。談到存儲(chǔ)數(shù)據(jù)火诸,那么必然要涉及到相關(guān)的數(shù)據(jù)類型躲查,redis主要有以下數(shù)據(jù)類型:
string(字符串)
描述:string 是 redis 最基本的類型它浅,你可以理解成與 Memcached 一模一樣的類型,一個(gè) key 對(duì)應(yīng)一個(gè) value镣煮。value其實(shí)不僅是String姐霍,也可以是數(shù)字。string 類型是二進(jìn)制安全的典唇。意思是 redis 的 string 可以包含任何數(shù)據(jù)镊折。比如jpg圖片或者序列化的對(duì)象。string 類型是 Redis 最基本的數(shù)據(jù)類型介衔,string 類型的值最大能存儲(chǔ) 512MB恨胚。
常用命令:get、set炎咖、incr赃泡、decr寒波、mget等。
應(yīng)用場(chǎng)景:規(guī)key-value緩存應(yīng)用升熊。常規(guī)計(jì)數(shù): 點(diǎn)贊數(shù), 粉絲數(shù)俄烁。
hash(哈希)
描述: hash 是一個(gè)鍵值(key => value)對(duì)集合。Redis hash 是一個(gè) string 類型的 field 和 value 的映射表级野,hash 特別適合用于存儲(chǔ)對(duì)象页屠。
常用命令:hget,hset,hgetall 等。
應(yīng)用場(chǎng)景:存儲(chǔ)部分變更數(shù)據(jù)勺阐,如商品信息等卷中。
list(列表)
描述:list 列表是簡單的字符串列表,按照插入順序排序渊抽。你可以添加一個(gè)元素到列表的頭部(左邊)或者尾部(右邊)蟆豫。列表最多可存儲(chǔ) 232 - 1 元素 (4294967295, 每個(gè)列表可存儲(chǔ)40多億)。
常用命令:lpush(添加左邊元素),rpush,lpop(移除左邊第一個(gè)元素),rpop,lrange(獲取列表片段懒闷,LRANGE key start stop)等十减。
應(yīng)用場(chǎng)景:消息隊(duì)列,關(guān)注列表愤估,粉絲列表等都可以用Redis的list結(jié)構(gòu)來實(shí)現(xiàn)帮辟。
set(無序集合)
描述: set是string類型的無序集合。集合是通過hashtable實(shí)現(xiàn)的玩焰,概念和數(shù)學(xué)中個(gè)的集合基本類似由驹,可以交集,并集昔园,差集等等蔓榄,set中的元素是沒有順序的。所以添加默刚,刪除甥郑,查找的復(fù)雜度都是O(1)。
常用命令:sadd,spop,smembers,sunion 等荤西。
應(yīng)用場(chǎng)景:交集澜搅,并集,差集(微博中邪锌,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中勉躺,將其所有粉絲存在一個(gè)集合。Redis還為集合提供了求交集觅丰、并集饵溅、差集等操作,可以非常方便的實(shí)現(xiàn)如共同關(guān)注舶胀、共同喜好概说、二度好友等功能,對(duì)上面的所有集合操作嚣伐,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中)
zset(有序集合)
描述:zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員糖赔。不同是可以打分(排序)
常用命令:zadd,zrange,zrem,zcard等
應(yīng)用場(chǎng)景:排行榜,帶權(quán)重的消息隊(duì)列
Bitmaps
描述:Bitmaps這個(gè)“數(shù)據(jù)結(jié)構(gòu)”可以實(shí)現(xiàn)對(duì)位的操作轩端。 把數(shù)據(jù)結(jié)構(gòu)加上引號(hào)主要因?yàn)椋?br>
Bitmaps本身不是一種數(shù)據(jù)結(jié)構(gòu)放典, 實(shí)際上它就是字符串 , 但是它可以對(duì)字符串的位進(jìn)行操作基茵。
Bitmaps單獨(dú)提供了一套命令奋构, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一個(gè)以位為單位的數(shù)組拱层, 數(shù)組的每個(gè)單元只能存儲(chǔ)0和1弥臼, 數(shù)組的下標(biāo)在Bitmaps中叫做偏移量。其實(shí)大多數(shù)Bitmaps的應(yīng)用場(chǎng)景可以用其他數(shù)據(jù)類型來實(shí)現(xiàn)根灯,用Bitmaps主要是存儲(chǔ)空間占用特別少
常用命令:getbit key offset径缅;setbit key offset value
應(yīng)用場(chǎng)景:統(tǒng)計(jì)用戶訪問,統(tǒng)計(jì)電影某天的的播放量
HyperLogLog
描述:Redis 在 2.8.9 版本添加了 HyperLogLog 結(jié)構(gòu)烙肺。Redis HyperLogLog 是用來做基數(shù)統(tǒng)計(jì)的算法纳猪,HyperLogLog 的優(yōu)點(diǎn)是,在輸入元素的數(shù)量或者體積非常非常大時(shí)桃笙,計(jì)算基數(shù)所需的空間總是固定 的氏堤、并且是很小的。在 Redis 里面搏明,每個(gè) HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存鼠锈,就可以計(jì)算接近 2^64 個(gè)不同元素的基 數(shù)。這和計(jì)算基數(shù)時(shí)熏瞄,元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對(duì)比脚祟。但是,因?yàn)?HyperLogLog 只會(huì)根據(jù)輸入元素來計(jì)算基數(shù)强饮,而不會(huì)儲(chǔ)存輸入元素本身由桌,所以 HyperLogLog 不能像集合那樣,返回輸入的各個(gè)元素邮丰。這類數(shù)據(jù)結(jié)構(gòu)的基本大的思路就是使用統(tǒng)計(jì)概率上的算法行您,犧牲數(shù)據(jù)的精準(zhǔn)性來節(jié)省內(nèi)存的占用空間及提升相關(guān)操作的性能
常用命令:pfadd, pfcount剪廉,pfmerge
應(yīng)用場(chǎng)景:統(tǒng)計(jì)網(wǎng)站的每日UV
GEO
描述:GEO功能在Redis3.2版本提供娃循,支持存儲(chǔ)地理位置信息用來實(shí)現(xiàn)諸如附近位置、搖一搖這類依賴于地理位置信息的功能.geo的數(shù)據(jù)類型為zset.
常用命令:geoadd斗蒋,geopos捌斧, geodist
應(yīng)用場(chǎng)景:附近位置笛质、搖一搖