redis數(shù)據(jù)類型和應(yīng)用場景

redis數(shù)據(jù)類型和應(yīng)用場景

redis簡介

Redis是當(dāng)前比較熱門的NOSQL系統(tǒng)之一,它是一個開源的使用ANSI c語言編寫的key-value存儲系統(tǒng)(區(qū)別于MySQL的二維表格的形式存儲。),Redis數(shù)據(jù)都是緩存在計算機內(nèi)存中并且它會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,實現(xiàn)數(shù)據(jù)的持久化。談到存儲數(shù)據(jù),那么必然要涉及到相關(guān)的數(shù)據(jù)類型,redis主要有以下數(shù)據(jù)類型:

string(字符串)

描述:string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應(yīng)一個 value。value其實不僅是String,也可以是數(shù)字。string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對象。string 類型是 Redis 最基本的數(shù)據(jù)類型,string 類型的值最大能存儲 512MB。

常用命令:get、set、incr、decr、mget等。

應(yīng)用場景:規(guī)key-value緩存應(yīng)用。常規(guī)計數(shù): 點贊數(shù), 粉絲數(shù)。

hash(哈希)

描述: hash 是一個鍵值(key => value)對集合。Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。

常用命令:hget,hset,hgetall 等。

應(yīng)用場景:存儲部分變更數(shù)據(jù),如商品信息等。

list(列表)

描述:list 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。

常用命令:lpush(添加左邊元素),rpush,lpop(移除左邊第一個元素),rpop,lrange(獲取列表片段,LRANGE key start stop)等。

應(yīng)用場景:消息隊列,關(guān)注列表,粉絲列表等都可以用Redis的list結(jié)構(gòu)來實現(xiàn)。

set(無序集合)

描述: set是string類型的無序集合。集合是通過hashtable實現(xiàn)的,概念和數(shù)學(xué)中個的集合基本類似,可以交集,并集,差集等等,set中的元素是沒有順序的。所以添加,刪除,查找的復(fù)雜度都是O(1)。

常用命令:sadd,spop,smembers,sunion 等。

應(yīng)用場景:交集,并集,差集(微博中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合。Redis還為集合提供了求交集、并集、差集等操作,可以非常方便的實現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個新的集合中)

zset(有序集合)

描述:zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。不同是可以打分(排序)

常用命令:zadd,zrange,zrem,zcard等

應(yīng)用場景:排行榜,帶權(quán)重的消息隊列

Bitmaps

描述:Bitmaps這個“數(shù)據(jù)結(jié)構(gòu)”可以實現(xiàn)對位的操作。 把數(shù)據(jù)結(jié)構(gòu)加上引號主要因為:
Bitmaps本身不是一種數(shù)據(jù)結(jié)構(gòu), 實際上它就是字符串 , 但是它可以對字符串的位進行操作。
Bitmaps單獨提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一個以位為單位的數(shù)組, 數(shù)組的每個單元只能存儲0和1, 數(shù)組的下標(biāo)在Bitmaps中叫做偏移量。其實大多數(shù)Bitmaps的應(yīng)用場景可以用其他數(shù)據(jù)類型來實現(xiàn),用Bitmaps主要是存儲空間占用特別少

常用命令:getbit key offset;setbit key offset value

應(yīng)用場景:統(tǒng)計用戶訪問,統(tǒng)計電影某天的的播放量

HyperLogLog

描述:Redis 在 2.8.9 版本添加了 HyperLogLog 結(jié)構(gòu)。Redis HyperLogLog 是用來做基數(shù)統(tǒng)計的算法,HyperLogLog 的優(yōu)點是,在輸入元素的數(shù)量或者體積非常非常大時,計算基數(shù)所需的空間總是固定 的、并且是很小的。在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內(nèi)存,就可以計算接近 2^64 個不同元素的基 數(shù)。這和計算基數(shù)時,元素越多耗費內(nèi)存就越多的集合形成鮮明對比。但是,因為 HyperLogLog 只會根據(jù)輸入元素來計算基數(shù),而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。這類數(shù)據(jù)結(jié)構(gòu)的基本大的思路就是使用統(tǒng)計概率上的算法,犧牲數(shù)據(jù)的精準(zhǔn)性來節(jié)省內(nèi)存的占用空間及提升相關(guān)操作的性能

常用命令:pfadd, pfcount,pfmerge

應(yīng)用場景:統(tǒng)計網(wǎng)站的每日UV

GEO

描述:GEO功能在Redis3.2版本提供,支持存儲地理位置信息用來實現(xiàn)諸如附近位置、搖一搖這類依賴于地理位置信息的功能.geo的數(shù)據(jù)類型為zset.

常用命令:geoadd,geopos, geodist

應(yīng)用場景:附近位置、搖一搖

參考列表:
Redis五種數(shù)據(jù)類型及應(yīng)用場景

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容