Redis簡介
Redis是一種速度非常快的非關系數據庫(non-relational database),它可以存儲鍵(key)與5種不同類型的值(value)之間的映射(mapping),可以將存儲在內存的鍵值對數據持久化到硬盤,可以用復制特性來擴展讀性能,還可以使用客戶端分片來擴展寫性能。
高性能鍵值緩存服務器memcached經常被拿來和Redis進行比較:兩者都用於存儲鍵值映射,性能也差不多。但Redis可以以兩種不同的方式將數據寫入硬盤,並且Redis還支持其他四種結構,而memcached之恩給你存儲普通的字符串鍵。
Redis有兩種不同形式的持久化方法,他們都可以用小而緊湊的格式將存儲在內存中的數據寫入磁盤:第一種持久化方法為時間點轉儲(point-in-time dump),轉儲操作既可以在“指定時間段內有指定數量的寫操作執行”,也可以通過調用兩條轉儲到硬盤(dump-to-disk)命令中的任何一條來執行;第二種持久化方法將所有修改了數據庫的命令都寫入一個之追加(append-only)文件裏面,用戶可以根據數據的重要程度,將只追加寫入設置設為從不同步(sync),每秒同步一次或沒寫入一個命令就同步一次。
Redis實現了主從復制特性:執行復制的從服務器會連接上主服務器。接受主服務器發送的整個數據庫的初始副本(copy);之後主服務器執行寫的命令都會被發送給所有連接著的從服務器去執行,從而實時的更新從服務器的數據集。服務器包含的數據會不斷進行更新,因此客戶端可以向任意一個服務器發送讀請求以此來避免對主服務器進行集中式的訪問。
memcached用APPEDND命令將數據添加到已有字符串的末尾,並將那個字符串當做列表來使用。memcached通過黑名單(blacklist)來隱藏列表裏的元素,從而避免對元素執行讀取,更新,寫入等操作。
數據庫的一個常見用法是存儲長期的報告數據,並將這些報告數據用作固定時間範圍內的聚合數據(aggregates)。收集聚合數據的常見做法是:先將各個行插入一個報表裏面,之後再通過掃描這些行來收集聚合數據,並根據收集到的聚合數據來更新聚合表中已有的那些行。這對於大部分數據庫來說,插入行操作的執行速度非常快,更新趨勢一個相當慢的速度,更新會引起一次隨機讀寫。在Redis裏面,用戶可以直接使用原子的INCR命令及其變種來計算聚合數據,並且因為Redis將數據存儲在內存裏,發送給Redis的命令請求並不需要經過典型的查詢分析器(parser)或查詢優化器(optimizer)進行處理。
Redis可以存儲鍵與5種不同數據結構類型之間的映射,這5種數據結構類型分別STRING(字符串),LIST(列表),SET(集合),HASH(散列)和ZSET(有序集合)。
STRING:可以使字符串。整數或者浮點數。對整個字符串或字符串的其中一部分執行操作;對整數和浮點數執行自增(increment)或自減(decrement)操作
LIST:一個鏈表,鏈表上的每個節點都包含了一個字符串。從鏈表的兩端推入或彈出元素;根據偏移量對鏈表進行修建(trim);讀取單個或多個元素;根據值查找或溢出元素
SET:包含字符串的無序收集器(unordered collection),並且被包含的每個字符串都是獨一無二,各不相同的。添加,獲取,移除單個元素;檢查一個元素是否存在於集合中;計算交集,並集差集;從集合裏面隨機獲取元素
HASH:包含鍵值對的無需散列表.。添加,獲取,移除單個鍵值對;獲取所有鍵值對
ZSET:字符串成員與浮點數分值之間的有序映射,元素的排列順序由分值的大小決定
LIST
一個列表結構可有有序地存儲多個字符串。Redis列表可執行的操作有LPUSH命令和RPUSH命令,分別對應於將元素推入到列表的左端和右端;LPOP和RPOP命令分別用於從列表的左端和右端彈出元素;LINDEX命令用於獲取列表在給定位置上的一個元素;LRANGE命令用於獲取列表在給定範圍上的所有夙願。LRANGE用於獲取列表在給定範圍上的所有值。
SET
Redis的集合和列表可以存儲多個字符串,列表可以存儲多個相同的字符串,集合則通過使用散列表來保證自己存儲的每個字符串都是不一樣的。可以通過SADD命令將元素添加到集合;SREM命令從集合裏面移除元素;SISMEMBER命令快速檢查一個元素是否已經存在於集合中;SMEMBERS獲取集合包含的所有元素。
HASH
Redis的散列可以存儲多個鍵值對之間的映射。散列存儲的值既可以是字符串又可以是數字值,並且用戶同樣可以對散列存儲的數字執行自增或自減操作。HSET在散列裏面關聯器給定的鍵值對;HGET獲取指定散列鍵的值;HGETALL獲取散列包含的所有鍵值對;HDEL若給定鍵存在於散列裏面。則移除這個key。
ZSET
Redis有序集合的鍵被稱為成員(member),每個成員都是各不相同的;而有序集合的值則成為分值(score),分值必須為浮點數。有序集合是Redis裏面唯一一個既可以根據成員訪問元素,又可以根據分值以及分值的排列順序來訪問元素的數據結構。ZADD將一個帶有給定分值的成員添加到有序集合裏面;ZRANGE根據元素在有序排列中所處的位置,從有序集合裏面獲取多個元素;ZRANGEBYSCORE獲取有序集合在給定分值範圍內的所有元素;ZREM若給定成員存在於有序集合,那麽移除這個成員
Redis簡介