日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Redis各個數(shù)據(jù)類型的使用場景,redis數(shù)據(jù)類型及應用場景( 二 )


embstr 的優(yōu)勢在于創(chuàng)建時少分配一次空間(RedisObject 和 sds 是連續(xù)的),刪除時少釋放一次空間,以及對象的所有數(shù)據(jù)連在一起,尋找方便;當然缺點也非常明顯,如果字符串的長度增加,需要重新分配內(nèi)存的時候,整個 RedisObject 和 sds 都需要重新分配空間 。修改 embstr 對象的時候,Redis 會將其轉(zhuǎn)換成 raw 格式再進行修改,所以 embstr 對象修改之后的對象,一定是 raw 的 。
應用場景:常規(guī)計數(shù)都可以使用,可用作緩存、計數(shù)、限速等等,比如商品剩余數(shù)量,字典表信息,長度不能超過 512MB 。HashHash 對象的底層實現(xiàn)可以是 ziplist 或者 hashtable 。ziplist:在這個數(shù)據(jù)結(jié)構(gòu)中,是按照 key1, value1, key2, value2 這樣的順序存放來存儲的;hashTable:是由 dict 這個結(jié)構(gòu)來實現(xiàn)的 。
(這個結(jié)構(gòu)比較復雜,后面單寫一篇來說)應用場景:Hash 適用于存儲結(jié)構(gòu)化的對象,可以直接修改這個對象中的某個字段的值;比如用戶信息 。ListList 對象的編碼可以是 ziplist 或者 linkedlist,從名字上也能看出來兩種結(jié)構(gòu)都是啥 。ziplist:是一種壓縮鏈表,它存儲數(shù)據(jù)都是連續(xù)地放在內(nèi)存區(qū)域當中 。
linkedlist:是一種雙向鏈表 。應用場景:通常網(wǎng)站上的消息列表,可以使用 List 來進行存儲;另外 lrange 命令,從某個元素開始,讀取多少個元素,可以看做是分頁查詢,比如很多網(wǎng)站上那種不斷下拉,不斷分頁的效果 。SetSet 相對于 List 來說,Set 是可以自動排重的;它的編碼可以是 intset 或者 hashtable。
intset:是一個整數(shù)集合,支持三種長度的整數(shù):int16_t、int32_t、int64_t;集合中的數(shù)據(jù)長度必須是一致的,比如一個 int16_t 長度的 Set,當插入了一條 int32_t 長度的數(shù)據(jù),那么所有的數(shù)據(jù)都會轉(zhuǎn)成 int32_t 長度(不支持降級) 。hashTable:對于 Set 來說,hashTable 的 value 永遠為 NULL 。
應用場景:如果要存儲一個列表,同時又需要做數(shù)據(jù)排重的時候,可以使用 set ;另外,Redis 還為 Set 提供了求交集、并集、差集等操作,比如微博上面的【共同關注】這個功能,就可以用 Set 實現(xiàn) 。ZSet / Sorted Set和 Set 相比,ZSet 增加了一個參數(shù) score,集合中的元素按照 score 進行有序排列 。
有序集合的編碼可能兩種,一種是 ziplist,另一種是 skipList 與 hashTable 的結(jié)合 。ziplist:和 Hash 類似,元素 和 score 都是按順序存放的;比較適合用于元素內(nèi)容不大的場景 。skipListhashTable:是一種添加,移除,更新元素等操作更高效的數(shù)據(jù)結(jié)構(gòu),這個跳躍表的數(shù)據(jù)結(jié)構(gòu),我近期會發(fā)一篇文章單獨介紹 。
數(shù)據(jù)多的時候為什么要使用redis而不用mysql?

Redis各個數(shù)據(jù)類型的使用場景,redis數(shù)據(jù)類型及應用場景


【Redis各個數(shù)據(jù)類型的使用場景,redis數(shù)據(jù)類型及應用場景】通常來說,當數(shù)據(jù)多、并發(fā)量大的時候,架構(gòu)中可以引入Redis,幫助提升架構(gòu)的整體性能,減少Mysql(或其他數(shù)據(jù)庫)的壓力,但不是使用Redis,就不用MySQL 。因為Redis的性能十分優(yōu)越,可以支持每秒十幾萬此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發(fā)的場景下數(shù)據(jù)的安全和一致性,所以它經(jīng)常用于兩個場景:緩存經(jīng)常會被查詢,但是不經(jīng)常被修改或者刪除的數(shù)據(jù);比如數(shù)據(jù)字典,業(yè)務數(shù)據(jù)中的熱點數(shù)據(jù);這樣不僅提升查詢效率,還可以減少數(shù)據(jù)庫的壓力;經(jīng)常被查詢,實時性要求不高數(shù)據(jù),比如網(wǎng)站的最新列表、排行榜之類的數(shù)據(jù),只需要定時統(tǒng)計一次,然后把統(tǒng)計結(jié)果放到Redis中提供查詢(請不要使用select top 10 from xxxx) 。
緩存可以方便數(shù)據(jù)共享,比如我先用電腦網(wǎng)頁打開X東,選了兩件商品放到購物車里面,再登錄手機APP,也是可以看到購物車里面的商品的 。判斷數(shù)據(jù)是否適合緩存到Redis中,可以從幾個方面考慮:會經(jīng)常查詢么?命中率如何?寫操作多么?數(shù)據(jù)大小?我們經(jīng)常采用這樣的方式將數(shù)據(jù)刷到Redis中:查詢的請求過來,現(xiàn)在Redis中查詢,如果查詢不到,就查詢數(shù)據(jù)庫拿到數(shù)據(jù),再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數(shù)據(jù);不過要注意【緩存穿透】的問題 。

推薦閱讀