Redis 是一種基於鍵值對的NoSQL 咱們用它來作數據緩存,減小數據庫的壓力。咱們能夠進入一下網站對redis進行學習
http://try.redis.io/redis
Redis中全部的數據都是以key/value的方式存儲的,咱們所說的數據類型指的是value,
在Redis中有一下集中數據類型數據庫
ZSet編程
因爲Redis是鍵值存儲。咱們可使用set來進行數據的存儲,使用get進行數據的讀取,使用 del 對數據進行刪除緩存
set name "test"這裏重複使用set能夠對這條數據進行修改
get name => "test"安全
因爲redis能夠被多個客戶端鏈接使用,若是多個客戶端同時修改一個鍵,若是使用關係型數據庫能夠進行鎖表操做來避免數據的不一致。在Redis中則使用INCR 以原子的方式遞增存儲在給定鍵上的數字。數據結構
set count 10
incr count => 11
incr count =>12編程語言
Redis中能夠控制key只存在的一段時間,在這段時間內,這個鍵是存在的,時間到了後,這個鍵會自動銷燬。咱們可使用EXPIRE和TTL命令來操做這個鍵何時刪除和查看何時刪除,TTL命令的返回值是一個整數,-1則是永久存在-2則是不存在。學習
SET lock "lock"
EXPIRE lock 120 //120秒後會自動刪除
TTL lock => 113 //113秒後會自動刪除
TTL lock => (integer)-2 //lock 被銷燬測試
Redis中還能夠存一些更復雜的數據結構網站
與列表交互的命令有rpush、lpush、llen、lrange、lpop和rpop
rpush:將新值放在列表的末尾
lpush:將新值放在列表的開頭
lrange:查詢列表的子集,它有兩個參數,第一個是指定開始參數起始位置(從0開始)第二個參數是指指定的結束位置(第二個參數若是是-1則表示列出到最後一個)
llen:返回列表的當前長度
lpop:從列表中刪除第一個元素並返回它
rpop:從列表中刪除最後一個元素並返回它
rpush friends 'alice'
lpush friends 'alice'
lrange friends => "alice" "alice"
llen friends => 2
lpop friends => "alice"
rpop friends => nul
集合相似於列表,可是集合裏面不能存儲相同的值,而且集合的存儲是無序的,使用集合的命令有是sadd、srem、sismember、smembers和sunion
sadd:將給定值添加到集合中
srem:從集合中刪除給定值
sismember:測試給定值是否在集合中,若是在,則返回1,若是不在則返回0 *
smemebrs:返回此集合中全部成員的列表
sunion:兩個或多個集合組合並返回全部元素的列表
sadd super 'fly'
srem super fly
sismember super 'fly' => 0
sismembers => nul
sadd bired 'fly'
sunion super bired => "fly"
集合本生是沒有排序的,可是因爲它們未排序,所以沒法解決許多問題。redis 1.2 中引入了Sorted Sets(有序集合)。有序集合相似於常規集。
zadd: 添加一個有序集合,它有兩個參數,第一個是排序的優先級,第二個是值。
zrange:查看一個有序集合某一區間內的值。它也有連個參數,第一個是查找的起始位置,第二個是結束位置,第二個若是是-1則表示查到最後
zadd black 1101 'alice'
zadd black 1111 'jack'
zrange black 0 -1 => "alice" "jack"
Redis 中Hashes是字符串字段與字符串值之間的映射,所以它們是表示對象的完整數據類型
hset:redis中hashes中存儲數據的命令,它支持一次存儲多個hashes數據
hgetall:獲取全部保存的數據
hget:獲取一個可能存在的字段值
hdel:刪除某一個字段
hincrby:以原子的方式遞增
hset user name 'john smith' email 'john.simith@example.com'
hgetall user => "name" "john smith" "email" "john.simith@example.com"
hget user name => "john smith"
hset count visits 10
hincrby count visits 1 => 11
hdel count vistis
類型 | 簡介 | 特性 | 場景 |
---|---|---|---|
String | 二進制安全 | 能夠包含任何數據,好比jpg圖片或者序列化的對象,一個鍵最大能存儲512M | /--- |
Hash | 鍵值對集合,即編程語言中的Map類型 | 適合存儲對象,而且能夠像數據庫中update一個屬性同樣只修改某一項屬性值(Memcached中須要取出整個字符串反序列化成對象修改完再序列化存回去) | 存儲、讀取、修改用戶屬性 |
List | 鏈表(雙向鏈表) | 增刪快,提供了操做某一段元素的API | 1,最新消息排行等功能(好比朋友圈的時間線) 2,消息隊列 |
Set | 哈希表實現,元素不重複 | 一、添加、刪除,查找的複雜度都是O(1) 二、爲集合提供了求交集、並集、差集等操做 | 一、共同好友 二、利用惟一性,統計訪問網站的全部獨立ip 三、好友推薦時,根據tag求交集,大於某個閾值就能夠推薦 |
Sorted Set | 將Set中的元素增長一個權重參數score,元素按score有序排列 | 數據插入集合時,已經進行自然排序 | 一、排行榜 二、帶權重的消息隊列 |