Redis是什么,redis是什么( 二 )


應用場景:常規計數都可以使用,可用作緩存、計數、限速等等,比如商品剩余數量,字典表信息,長度不能超過 512MB 。HashHash 對象的底層實現可以是 ziplist 或者 hashtable 。ziplist:在這個數據結構中,是按照 key1, value1, key2, value2 這樣的順序存放來存儲的;hashTable:是由 dict 這個結構來實現的 。
(這個結構比較復雜,后面單寫一篇來說)應用場景:Hash 適用于存儲結構化的對象,可以直接修改這個對象中的某個字段的值;比如用戶信息 。ListList 對象的編碼可以是 ziplist 或者 linkedlist,從名字上也能看出來兩種結構都是啥 。ziplist:是一種壓縮鏈表,它存儲數據都是連續地放在內存區域當中 。
linkedlist:是一種雙向鏈表 。應用場景:通常網站上的消息列表,可以使用 List 來進行存儲;另外 lrange 命令,從某個元素開始,讀取多少個元素,可以看做是分頁查詢,比如很多網站上那種不斷下拉,不斷分頁的效果 。SetSet 相對于 List 來說,Set 是可以自動排重的;它的編碼可以是 intset 或者 hashtable。
intset:是一個整數集合,支持三種長度的整數:int16_t、int32_t、int64_t;集合中的數據長度必須是一致的,比如一個 int16_t 長度的 Set,當插入了一條 int32_t 長度的數據,那么所有的數據都會轉成 int32_t 長度(不支持降級) 。hashTable:對于 Set 來說,hashTable 的 value 永遠為 NULL 。
應用場景:如果要存儲一個列表,同時又需要做數據排重的時候,可以使用 set ;另外,Redis 還為 Set 提供了求交集、并集、差集等操作,比如微博上面的【共同關注】這個功能,就可以用 Set 實現 。ZSet / Sorted Set和 Set 相比,ZSet 增加了一個參數 score,集合中的元素按照 score 進行有序排列 。
有序集合的編碼可能兩種,一種是 ziplist,另一種是 skipList 與 hashTable 的結合 。ziplist:和 Hash 類似,元素 和 score 都是按順序存放的;比較適合用于元素內容不大的場景 。skipListhashTable:是一種添加,移除,更新元素等操作更高效的數據結構,這個跳躍表的數據結構,我近期會發一篇文章單獨介紹 。
有些程序員一直堅持反對使用redis怎么辦?

Redis是什么,redis是什么


分享大佬的回答,似乎很有道理 。不要告訴我們用不用redis,你得告訴我們你為什么想要用redis,不用redis業務會有什么問題?天下沒有免費的午餐,不動腦子直接上緩存/NOSQL可能會帶來更多更嚴重的問題 。單一數據庫最大的好處在于事務性實現簡單,由數據庫自己保證 。舉個簡單的例子,下訂單需要扣除一個庫存,然后插入一條訂單條目,如果庫存和訂單都是數據庫表項的話這個事務是無懈可擊的,如果庫存在redis里,訂單條目是MySQL,通常就需要先寫redis,成功之后再寫數據庫,如果寫數據庫失敗了還需要回滾redis,如果最后這個回滾因為網絡之類的原因失敗了,就會多扣一個庫存 。
memcache、redis、mongodb優缺點是什么啊,怎么選?
Redis是什么,redis是什么


雖然都是nosql范疇,但是memcache、redis主要設計目的是做緩存使用mongodb的核心是提供無模式文檔結構的持久化存儲,它的兩個核心點:提供接近(其實差距挺大的)緩存服務器的速度和接近關系數據庫API(這個已經差不多了,連接查詢是弱點)的接口 。memcache、redis如果是幾年前,memcache、redis之間還有選擇綜合癥,目前的市場,你可以直接選擇redis,把精力完全放在redis身上去深入 。
這是是市場反應,這個相信對你的選擇有絕對說服力 。memcache在性能方面沒有優勢了,同時redis提供了更豐富的數據結構,各種原子操作,以及持久化(RDB/AOF) 。如果你是小規模項目,你甚至可以直接用它設計消息訂閱,使用它的即時消息訂閱發布(你有消息持久化需求的話可以額外用redis的列表功能等定制) 。

推薦閱讀