Redis是一個非常快速的非關系數據庫解決方案。其簡單的鍵值數據模型使 Redis 能夠處理大型數據集,同時保持令人印象深刻的讀寫速度和可用性。
Redis共有五種數據類型,分別是1、string(字符串);2、hash(哈希);3、list(列表);4、set(集合);5、sort set (有序集合)。
1、string(字符串)
字符串類型是Redis中最基本的數據存儲類型,它是一個由字節組成的序列,在Rediss中是二進制安全的。這意味著該類型可以接受任何格式數據,如JPEG圖像數據和Json對象說明信息。它是標準的key-value,通常用于存儲字符串、整數和浮點。Value可容納高達512MB的數據。應用程序場景:非常常見的場景用于計算站點訪問量、當前在線人數等。incr命令(++操作)
2、hash(散列)
在Memcached中,我們經常將一些結構化的信息打包成hashmap,在客戶端序列化后存儲為一個字符串的值,比如用戶的昵稱、年齡、性別、積分等,這時候在需要修改其中某一項時,通常需要將所有值取出反序列化后,修改某一項的值,再序列化存儲回去。這樣不僅增大了開銷,也不適用于一些可能并發操作的場合(比如兩個并發的操作都需要修改積分)。而Redis的Hash結構可以使你像在數據庫中Update一個屬性一樣只修改某一項屬性值。應用程序方案:存儲部分更改數據,如用戶信息、會話共享。
3、list(列表)
Redis的列表允許用戶從序列的兩端推入或者彈出元素,列表由多個字符串值組成的有序可重復的序列,是鏈表結構,所以向列表兩端添加元素的時間復雜度為0(1),獲取越接近兩端的元素速度就越快。這意味著,即使有數以千萬計的元素列表,也可以極快地獲得10條記錄在頭部或尾部。可列入名單的要素最多只有4294967295個。應用場景:(1)最新消息排行榜。(2)消息隊列,以完成多程序之間的消息交換。可以用push操作將任務存在list中(生產者),然后線程在用pop操作將任務取出進行執行。(消費者)
4、set(集合)
所謂集合就是一堆不重復值的組合,并且是沒有順序的。在微博應用中,可以將一個用戶所有的關注人存在一個集合中,將其所有粉絲存在一個集合。Redis還提供了諸如collection、union和differences等操作,使得實現諸如commandism、poperhike、secondfriends這樣的功能變得很容易,或者選擇是將結果返回給客戶機,還是將它們保存到使用不同命令的新的集合中。
5、sorted set (有序集合)
Redis zset和set一樣也是string類型元素的集合,且不允許重復的成員。不同之處在于,每個元素都與雙類型的分數相關聯。Redis使用分數將集合的成員從小到大排序。zset的成員是唯一的,但是grazentra的分數可以重復。sorted set是插入有序的,即自動排序。常用命令:zadd、zrange、zrem、zcard等。當你需要一個有序的并且不重復的集合列表時,那么可以選擇sorted set數據結構。應用舉例:(1)例如存儲全班同學的成績,其集合value可以是同學的學號,而score就可以是成績。(2)排行榜應用,根據得分列出topN的用戶等。