Redis擁有與關係型數據庫同樣的基礎概念。典型的使用場景就是將一個應用的全部數據歸在一塊兒,以與其餘應用的數據區分開。
Redis中的數據庫用數字做爲標示符,默認數據庫的標示爲0。使用下面的命令選擇具體的數據庫:數據庫
select <number of a database>
在Redis中,key能夠包含strings, hashes, lists, sets, sorted sets, bitmaps以及hyperloglogs。但就目前來講,知道key看起來像 "users:leto" 就夠了。其中leto是用戶名,冒號沒有任何特殊含義,但就Redis而言,使用分隔符是一種常見的組織key的方式。json
value能夠是任何東西,字符串、數字、或序列化後的對象(例如:xml、json或其餘格式)。多數狀況下,Redis會把它們當字節數組對待,而不會關心它們具體是什麼。數組
往Redis存入一個鍵值對:服務器
set <key> <value> # 示例 set users:leto '{"name": "leto", "planet": "dune", "likes": ["spice"]}'
根據key讀取值:app
get users:leto
Redis不支持對值進行查詢,好比查詢居住在dune星球上的用戶。由於Redis從不須要去讀取或理解存儲的值,因此值才能夠是任何東西。記住這點有助於咱們在這個新世界中將心思放在考慮如何建模上。性能
Redis是內存持久存儲(in-memory persistent store)。說到持久化,默認狀況下,Redis根據有多少key已經變化來決定是否須要對數據庫作快照並保存至磁盤。你能夠爲它配置這樣的快照策略:若是X個key發生了變化,就每Y秒保存一次數據庫。默認策略爲,若是1000個或更多的key發生了變化,就每60秒保存一次快照;若是9個或更少的key發生變化,就每15分鐘作一次。code
除了定時快照存儲,Redis還能夠運行在append模式(append mode)。任什麼時候候,只要key發生了變化,磁盤上一個只可追加的(append-only)文件就會被更新。在一些狀況下,丟失60秒的數據以換得性能是可接受的,由於可能會發生硬件或軟件失敗。但在一些狀況下,這樣的丟失又是不可接受的。Redis給咱們提供了這些選擇。第三種選擇就是讓slave節點去作持久化工做。xml
說到內存,Redis將全部數據保持在內存中。這就意味着運行Redis的成本比較高,畢竟RAM仍然是服務器硬件中最昂貴的部分。對象
一些開發者已經對數據會佔用多小的空間失去了感受,莎士比亞的全部做品大概佔用5.5M,壓縮後降至2。至於可伸縮性(scaling),其餘方案趨向受限於IO或CPU(IO- or CPU-bound)。哪一個限制 (RAM or IO) 將須要你擴展出更多的機器實際上取決於你數據的類型和你正在任何存儲和查詢它。除非你正在存儲大的多媒體文件,不然保存數據在內存中極可能不是什麼問題。對於那些這一點確實是個問題的應用,你可能須要使用IO-bound的方案,而非memory-bound。內存
此外,還可考慮對存儲數據進行壓縮或解壓縮,以處理時間換取RAM。
Redis雖然支持虛擬內存,可是這個特性被Redis開發者看作是一個失敗,不同意使用該特性。