Binary-safe string:字符串,Binary-safe的意思是它自己不會應爲某些特殊字符而致使字符串結束了,他能夠包含任何字符。好比在C中,字符串的結尾是'\0',意味着這個字符以後的不能被當作當前字符的redis
Lists:存儲string的鏈表,存儲順序即插入順序 (不是經過數組實現)數組
Sets:每一個字符串惟一的存儲集合bash
Sorted Sets:存儲的每個字符串都是惟一的,同時每一個字符串會具有一個score的屬性數據結構
Hashes:存儲key和value的映射關係,key和value都是stringspa
Bit Array:像bit數組同樣處理String值,每個bit均可以set和clear,計算1的數量等等code
HyperLogLogs:用來估計set中惟一值的個數對象
key能夠包含任意得字符,好比將一張JPEG文件內容做爲key。空字符串也是一個有效的key。redis的key使用時,有一些建議:排序
key最好不要太長。超過1024bytes的key一個是佔用內存,再者每次去找key作匹配也是須要一些時間的索引
可用經過hash來解決,好比使用SHA1ip
key過短也很差。好比"user:1000:followers"顯然比"u1000flw"擁有更好的可讀性,key自己的這點增加所須要的空間比起key對象和object對象來講能夠忽略
本身掌握好這裏頭的平衡
嘗試遵循必定的模式。好比以"object-type:id"這種方式來做爲key的規則
key最大512M
EXPIRE 命令用來設置過時
過時的精度能夠是秒或者毫秒
過時時間的分辨率一直是毫秒
過時時間自己會被持久化,即便redis自己中止服務了,停服期間過時的時間仍是一樣計算
使用 PERSIST 能夠去掉過時時間,永久保留 key
SET 命令來設置 string類型值,它會替代已經存儲在redis中的key的值,即便原來存儲的值類型不是string
- value大小不能超過512M
- 若是SET值時,發現已經存儲,則不覆蓋原值,能夠經過
set mykey myValue nx
,即後面跟 nx 來實現這種語義;另外若是僅想在key存在的時候覆蓋,能夠經過set mykey myValue xx
即後面跟 xx 來實現這種語義
- 批量獲取使用MSET,對應GET爲MGET
- set key value ex 10 設置10秒後過時
INCR 命令會把 string 類型值當作integer,實現自增1,若是key不存在,它會被置爲0,而後再自增1。若是 string 不能當作 integer 會拋出異常
- 自增的上限是64 bit的integer。
- 相似的命令有 INCRBY ,可自定義增加的大小。其他還有DECR DECRBY
- INCR命令是原子操做。
EXISTS 判斷key是否存在
DEL 刪除key
TYPE 判斷key的類型
TTL 獲取key的存活時間
LPUSH 命令向list頭添加元素只須要常量時間,可一次添加多個
RPUSH 命令向list尾部添加元素只須要常量時間,可一次添加多個
LRANGE 提取list中必定範圍內的元素,好比 lrange mylist 0 -1
,範圍是兩個索引,均可以是負數,-1表示最後一個,-2表示倒數第2個,依此類推
RPOP 返回list中的最後一個元素,並從list中移除它,若是沒有元素了就返回 NULL
LTRIM 保留給定索引範圍以內的數據,list中的其他值都刪掉
BRPOP 從list中返會並刪除最後一個元素,若是列表沒有值,就阻塞,根據阻塞的時間,若是是0,就一直阻塞直到有值存在,大於0則阻塞相應的時間長度
BLPOP 對應BRPOP操做第一個元素
使用brpop/blpop 須要注意:
- 客戶端的請求處理是按照順序來的,第一個阻塞的當有其它客戶端插入數據會第一個處理
- 它的返回會有兩個值
- 超時返回NULL
當往redis中沒有對應key存在的集合中push元素或者刪除一個空的集合,redis須要主動的去建立空的集合或者是刪除沒有值的key。對應的操做有三條規則:
使用hash可以用來表明一個對象,放到hash裏面的字段數量理論上是沒有限制的
hmset user:1000 name paxi verified 1 a 10 //塞入user的多個字段
hget user:1000 name //獲取name字段值
hmget user:1000 name verified //以數組形式返回值,key不存在返回null
hincrby user:1000 a 10 //將字段a增長10
複製代碼
set在redis中用來存儲string的無序集合。
sismember myset 1 //判斷 1 是否是在集合 myset中
sunionstore myset1 myset2 //假如 myset1不存在,就至關於把 myset2 中的元素拷貝到了 myset1
複製代碼
用來存儲惟一的string,它每個值都包含一個score屬性,它會根據以下規則排序
它內部實現是 dual-ported數據結構 ,內部同時包含了 skip list和 hash table,每次添加元素的時間是O(lgN),可是獲取的時間是常量的
zadd hackers 1940 「Alan Kay」 //往 hackers中添加 「Alan key」 它的score是1940
zrange hackers 0 -1 withscores //按照順序獲取hackers中的全部元素,0表示第一個,-1表示最後一個,同時返回對應元素的分數
zrevrange hackers 0 -1 //按照逆序
複製代碼
它並不是一種數據結構,而是在string類型上定義的一種面向bit的操做。它最大的優點是能節省空間
它是一種機率數據結構,用來統計惟一的值。通常統計惟一的值的時候,須要記錄全部已經訪問過的元素,這會消耗大量的內存,可是使用HyperLogLogs只須要使用常量的內存,最差的狀況下愛只須要12k,此時的精度不會差於1%。
HyperLogLogs實際只存儲了一個狀態,並不包含真實的元素的值