redis五種數據類型及使用場景


一、Redis簡介
       Redis 是一個開源的使用 C 語言編寫、支持網絡、可基於內存亦可持久化的日志型、Key-Value 數據庫。它可以用作數據庫、緩存和消息中間件。它支持的數據類型很豐富,如字符串、鏈表、集 合、以及散列等,並且還支持多種排序功能。
二、Redis的數據類型
       Redis 是一種高級的 key-value 的存儲系統,其中key值是二進制安全的,這意味着可以用任何二進制序列作為key值,從形如”foo”的簡單字符串到一個JPEG文件的內容都可以。空字符串也是有效key值。而Redis的 value 支持五種數據類型,分別為string (字符串類型),hash (表類型),list (列表類型),set(集合類型) 和zset (有序集合類型)。
1.String(字符串)類型
        字符串類型是 Redis 中最為基礎的數據存儲類型,它在 Redis 中以二進制保存,沒有編碼和解碼的過程。無論存入的是字符串、整數、浮點類型都會以字符串寫入redis中所有的key都是字符串類型,其它幾種數據類型構成的元素也是字符串。注意字符串的長度不能超過512M。
        常用命令:  set,get,decr,incr,mget 等。
<ignore_js_op>
<ignore_js_op>
  <ignore_js_op>
         應用場景:String是最常用的一種數據類型,普通的key/ value 存儲都可以歸為此類.即可以完全實現目前 Memcached 的功能,並且效率更高。還可以享受Redis的定時持久化,操作日志及 Replication ,常規計數:微博數,粉絲數等等功能。
2.Hash (表類型)
        Hash對象的鍵是一個字符串類型,值是一個鍵值對集合,每一個 Hash 可以存儲 40 億個鍵值對。
        常用命令: hget,hset,hgetall 等。
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
      應用場景:該類型非常適合於存儲對象的信息。如一個用戶有姓名,密碼,年齡等信息。
3.List (列表類型)
      Redis列表只是字符串列表,按插入順序排序。您可以向Redis列表的頭部或尾部添加元素。和數據結構中的普通鏈表一樣,我們可以在其左 部(left)和右部(right)添加新的元素。在插入時,如果該鍵並不存在,Redis 將為該鍵創建一個新的鏈表,如果這個鍵已經存在,則是向 list 添加元素。與此相反,如果鏈表中所有的元素均被移除,那么該鍵也將會被從數據庫中刪除。List 中可以包含的最大元素數量是 40 億個。
       常用命令:lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
     應用場景:Redis list的應用場景非常多,也是Redis最重要的數據結構之一。  我們可以輕松地實現最新消息排行等功能。 List的另一個應用就是消息隊列,可以利用Lists的PUSH操作,將任務存在Lists中,然后工作線程再用POP操作將任務取出進行執行。
4.set(集合類型)
      Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據。Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

      常用操作:sadd,spop,smembers,sunion 等。
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
      應用場景: Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在於set是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,並且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。
       Sets 集合的概念就是一堆不重復值的組合。利用Redis提供的Sets數據結構,可以存儲一些集合性的數據,比如在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis還為集合提供了求交集、並集、差集等操作,可以非常方便的實現如共同關注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結果返回給客戶端還是存集到一個新的集合中。
5.zset (有序集合類型)
       Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。有序集合的成員是唯一的,但分數(score)卻可以重復。集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

       常用命令:zadd,zrange,zrem,zcard等
<ignore_js_op>
<ignore_js_op>
<ignore_js_op>
      應用場景:Redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以通過用戶額外提供一個優先級(score)的參數來為成員排序,並且是插入有序的,即自動排序。當你需要一個有序的並且不重復的集合列表,那么可以選擇sorted set數據結構,比如twitter 的public timeline可以以發表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。
       另外還可以用Sorted Sets來做帶權重的隊列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。

更多免費技術資料可關注:annalin1203


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM