簡言之:redis
redis 是一個開源的,高性能的,基於鍵值對的緩存存儲系統。經過提供多種鍵值數據類型來適應不一樣的場景下的緩存存儲需求。同時redis的諸多高級功能使其能夠勝任消息隊列,任務隊列等不一樣的角色。緩存
是redis最基本的類型,能存任何形式的字符串,包括二進制數據。一個string類型的key容許存儲的最大容量是512MB,但勸你別這麼幹(存很大的數據),畢竟redis會把數據都加載到內存。post
在這個鍵foo存一個bar值,或者更新foo裏面的存的值爲bar:性能
SET foo bar網站
獲取這個foo裏面的值, 你將獲得字符串bar:索引
GET foo隊列
當鍵值裏面存的是數字,可使用命令遞增數字:內存
INCR foorem
它返回的是遞增之後的值。若是裏面存的不是數字,會報錯。字符串
增長指定的整數(返回增長後的值)
INCRBY key increment
減小指定的整數 && 減1(返回減小後的值)
DECRBY key decrement
DECR key
DECRBY key 5 和 INCRBY key -5的效果是同樣的。
增長指定的浮點數(返回增長後的值)
INCRBYFLOAT key increment\
在鍵值尾部追加字符串(返回追加後的總長度)
APPEND key value
獲取鍵值字符串長度
STRLEN key
同時設置 || 得到多個鍵值
MSET key1 value1 key2 value2
MGET key1 key2
若是咱們存的數據有多個部分組成,好比標題,做者,正文。這時候用散列比較合適了。散列類型的鍵值是一種字典結構,其存儲了字段和字段值的映射。一個散列類型鍵最多能夠包含2^32-1個字段。技術上並不要求每一個key存的字段都是一致的,如:key0裏面存的字段是title,author; key1裏面存的字段是content,title。
賦值&&取值
HSET key field1 value1
HGET key field1
同時設置 && 獲取多個字段的值 && 獲取全部字段和它們的值
HMSET key field1 value1 field2 value2
HMGET key field1 field2
HGETALL key
字段是否存在(不存在返回0,不然1):
HEXISTS key field
字段不存在時賦值(返回值與HEXISTS相反):
HSETNX key field value
增長數字(返回增長後的值):
HINCRBY key field increment
刪除字段(返回被刪的字段個數):
HDEL key field1 field2 ...
只獲取字段名 || 字段值
HKEYS key
HVALS key
得到字段數量
HLEN key
列表類型能夠存儲有序的字符串列表,常見的操做是向列表兩端添加元素,或者獲取列表的某個片斷。它是由雙向鏈表實現的,因此向兩端添加元素的時間複雜度是O(1),獲取越近兩端的元素速度越快。這種特性使它能快速完成下面場景:如社交網站的新鮮事,咱們只關心最新的內容,即便裏面的數據幾千萬個,咱們要找最新的100條也是很快的。一個列表類型的鍵最多能容納2^32-1個元素。命令:
LPUSH key value1 value2
RPUSH key value1 value2
LPOP key
RPOP key
LLEN key
LRANGE key start stop
LRANGE支持負索引,-1表示最右邊的元素,以此類推。
LREM key count value
將會刪除列表中前count個值爲value的元素。
LINDEX key index
LSET key index value
LTRIM key start stop
LINSERT key BEFORE|AFTER value1 value2
在列表中從左到右查找值爲value1的元素,而後根據第二個參數before仍是after來肯定value2插在前面仍是後面。
RPOPLPUSH source destination
從名字就能夠看出它的功能:先從source列表類型鍵的右邊彈出一個元素,而後將其加入到destination列表類型鍵的左邊,並返回這個元素的值,整個過程是原子的。
行爲很像高中數學課教過的集合。它每一個元素是不一樣的,且沒有順序,一個集合類型的鍵最多能夠存2^32-1個字符串。redis集合內部是使用值爲空的散列表實現的,因此向集合中加入元素,刪除元素,判斷元素是否存在,這些操做的時間複雜度都是O(1)。最方便的是多個集合之間能夠取交集,並集,差集。
命令:
SADD key value1 value2 ...
SREM key value1 value2 ...
SMEMBERS key
SISMEMBER key value
SDIFF key0 key1 key2 ...
這個例子的意思是:先求key0有而key1沒有的元素集合keyTmp,而後再求keyTmp有而key2沒有的元素集合。
SINTER key0 key1 key2 ...
求在三個幾個都存在的元素集合。
SUNION key0 key1 key2 ...
SCARD key
SDIFFSTORE destination key0 key1 key2 ...
將key0 key1 key2的差集存到destination鍵中。
SINTERSTORE destination key0 key1 key2 ...
將key0 key1 key2的交集存到destination鍵中。
SUNIONSTORE destination key0 key1 key2 ...
將key0 key1 key2的並集存到destination鍵中。
SRANDMEMBER key [count]
SPOP key
與Set的區別就是‘有序’二字。 在集合的基礎上,有序集合爲每一個元素都關聯了一個分數,這使得咱們不只能夠完成插入刪除,判斷元素是否存在等操做,還能夠得到分數最高(或最低)的前N個元素,得到指定分數範圍內的元素等。元素是不一樣的,可是它們分數能夠相同。
命令:
ZADD key score1 value1 score2 value2 ...
若是元素已經存在則會替換元素的分數。分數是整數或者浮點數。
ZSCORE key value
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGE 命令會按照元素從小到大的順序返回索引從start到stop之間的元素,加上WITHSCORES會返回分數。ZREVRANGE則是從大到小的順序。
ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
按照分數從小到大的順序,返回分數在min到max之間的元素。若是但願分數範圍不包含端點值,能夠這樣:
ZRANGEBYSCORE key 80 (100
limit,offset的用法與SQL相同。即,在得到的元素基礎上向後偏移offset個元素,而且只獲取前count個。好比:
ZRANGEBYSCORE key 80 100 limit 1 3
ZREVRANGEBYSCORE則是從大到小的順序。
ZINCRBY key increment value
ZCARD key
ZCOUNT key min max
要用開區間就用'('
ZREM key value1 value2 ...
ZREMRANGEBYRANK key start stop
按照從小到大的順序,刪除排名在start stop之間的元素,索引從0開始。
ZREMRANGEBYSCORE key min max
要開區間,則用'(',好比
ZREMRANGEBYSCORE key 80 (100
ZRANK key value
ZREVRANK key value
ZRANK從小到大,ZREVRANK從大到小,排名從0開始。