Redis 是一個速度很是快的非關係數據庫, 它能夠存儲鍵與 5 種不一樣兩類型的值之間的映射. 能夠將存儲在內存中的鍵值對持久到硬盤, 可使用複製特性來擴展讀性能, 還可使用客戶端分片來擴展寫性能.redis
分片
分片是一種將數據劃分爲多個部分的方法, 對數據的劃分能夠基於鍵包含的 ID, 基於鍵的散列值, 或者基於以上兩種的某種組合.經過對數據進行分片, 用戶能夠將數據存儲到多臺機器裏面, 也能夠從多臺機器裏面獲取數據, 這種方法在解決某些問題時能夠得到線性級別的性能提高.數據庫
Redis 實現了主從複製特性: 執行復制的從服務器會鏈接上主服務器, 接收主服務器發送的整個數據庫的初始副本; 以後主服務器執行的寫命令, 都會被髮送給全部鏈接着的從服務器去執行, 從而實時地更新從服務器的數據集.服務器
STRING
能夠是字符串, 整數或者浮點數. 對整個字符串或者字符串的其中一部分執行操做; 對整個數和浮點數執行自增或者自減操做. 性能
三個簡單的例子:code
set key value (若是存在就是修改, 不存在則是添加) get key (經過鍵獲取值) del key (刪除, 適用於全部類型)
LIST
一個鏈表, 鏈表上的每一個節點都包含了一個字符串. 從鏈表的兩端推出或彈出元素; 根據偏移量對鏈表進行修剪; 讀取單個或多個元素; 根據值查找或移除元素.對象
列表 (鏈表) 是有序的. 另外獲取元素時, 元素下標是從 0(零) 開始
幾個簡單的例子:內存
LPUSH 從左端插入元素. RPUSH 從右端插入元素. LPOP 從列表的左端彈出一個值, 並返回彈出的值(會移除元素). RLOP 從列表的右端彈出一個值, 並返回彈出的值(會移除元素). LRANGE 獲取列表在給定範圍上的全部值. lrange key 0 -1 表示從零開始獲取到最後. LINDEX 獲取列表在給定位置上的單個元素.
SET
包含字符串的無序收集器, 而且被包含的每一個字符串都是不可重複的. 添加, 獲取, 移除單個兒元素; 檢查一個元素是否存在集合中; 計算交集, 並集, 差集; 從集合裏面隨機獲取元素.rem
集合中的全部元素都是無序不可重的.
幾個簡單的例子:字符串
sadd 將元素添加到集合, 返回添加成功的元素個數. smembers 返回集合包含的全部元素. sismember 檢查指定元素是否在集合中, 若是存在返回1, 不然返回0. srem 若是給定的元素存在集合中, 就移除, 返回被移除元素的數量.
HASH
包含鍵值對的無序散列表. 添加, 獲取, 移除單個鍵值對或獲取全部鍵值對.get
咱們能夠把 Java 中的 map
集合看作是 redis 中的散列. 鍵爲 String
, 值爲 Object
, 也就是說散列適合存儲對象.
散列中的鍵(
field
)都是惟一而且是無序排列的, 沒一個鍵對應一個值.
幾個簡單的例子:
hset 若是給定的哈希表並不存在, 那麼一個新的哈希表(散列). 若是域 field (鍵)已經存在於哈希表中, 那麼它的舊值將被新值 value 覆蓋. hget 默認狀況下返回給定域的值. 若是給定域不存在於哈希表中, 又或者給定的哈希表並不存在, 那麼命令返回 ```nil```. hgetall 返回散列中全部的域和值. hdel 移除散列中的域.
ZSET
字符串成員與浮點數分值之間的有序映射, 元素的排列順序由分值的大小決定. 添加, 獲取, 刪除單個元素; 根據分值範圍或者成員來獲取元素.
有序集合和散列同樣, 都是用於存儲鍵值對: 有序集合的鍵被稱爲成員, 每一個成員都是各不相同的; 而有序集合的值被稱爲分值, 分值必須爲浮點數.
能夠根據成員訪問元素, 也能夠根據分值以及分值的排列順序來訪問元素的結構.
幾個簡單的例子:
zadd 將一個帶有給定分值的成員添加到有序集合裏面. zrange 根據元素在有序排列中所處的位置, 從有序集合裏面獲取多個元素. zrangebyscore 獲取全部元素. zrem 移除元素