Redis的五大數據類型java
string是redis最基本的類型,你能夠理解成與Memcached如出一轍的類型,一個key對應一個value。string類型是二進制安全的。意思是redis的string能夠包含任何數據。好比jpg圖片或者序列化的對象 。string類型是Redis最基本的數據類型,一個redis中字符串value最多能夠是512Mc++
Redis hash 是一個鍵值對集合。KV模式不變,但V是一個鍵值對。Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。相似Java裏面的Map<String,Object>redis
Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素導列表的頭部(左邊)或者尾部(右邊)。它的底層實際是個鏈表數據庫
Redis的Set是string類型的無序集合。它是經過HashTable實現實現的,c#
Redis zset 和 set 同樣也是string類型元素的集合,且不容許重複的成員。不一樣的是每一個元素都會關聯一個double類型的分數。redis正是經過分數來爲集合中的成員進行從小到大的排序。zset的成員是惟一的,但分數(score)卻能夠重複。
redis常見數據類型操做命令: http://redisdoc.com/
Key(鍵)經常使用命令安全
命令 | 用法 | 描述 | 示例 |
DEL | DEL key [key ...] | 刪除給定的一個或多個 key。 不存在的 key 會被忽略 | |
DUMP | DUMP key | 序列化給定 key ,並返回被序列化的值,使用 RESTORE 命令能夠將這個值反序列化爲 Redis 鍵 | |
EXISTS | EXISTS key | 檢查給定 key 是否存在 | |
EXPIRE | EXPIRE key seconds | 爲給定 key 設置生存時間,當 key 過時時(生存時間爲 0 ),它會被自動刪除 | |
PERSIST | PERSIST key | 移除 key 的過時時間,key 將持久保持。 | |
EXPIREAT | EXPIREAT key timestamp | EXPIREAT 的做用和 EXPIRE 相似,都用於爲 key 設置生存時間。 不一樣在於 EXPIREAT 命令接受的時間參數是 UNIX 時間戳(unix timestamp) | EXPIREAT cache 1355292000 # 這個 key 將在 2012.12.12 過時 |
KEYS | KEYS pattern | 查找全部符合給定模式 pattern 的 key | KEYS * # 匹配數據庫內全部 key |
MOVE | MOVE key db | 將當前數據庫的 key 移動到給定的數據庫 db 當中 若是當前數據庫(源數據庫)和給定數據庫(目標數據庫)有相同名字的給定 key ,或者 key 不存在於當前數據庫,那麼 MOVE 沒有任何效果。 所以,也能夠利用這一特性,將 MOVE 看成鎖(locking)原語(primitive) |
MOVE song 1 # 將 song 移動到數據庫 1 |
TTL | TTL key | 以秒爲單位,返回給定 key 的剩餘生存時間(TTL, time to live) 當 key 不存在時,返回 -2 。 當 key 存在但沒有設置剩餘生存時間時,返回 -1 。 不然,以秒爲單位,返回 key 的剩餘生存時間 |
|
PTTL | PTTL key | 以毫秒爲單位返回 key 的剩餘的過時時間。 | |
TYPE | TYPE key | 返回 key 所儲存的值的類型 | |
RENAME | RENAME key newkey | 將 key 更名爲 newkey 。 當 key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。 當 newkey 已經存在時, RENAME 命令將覆蓋舊值 |
String (字符串)經常使用命令大數據
命令 | 用法 | 描述 | 示例 |
SET | SET key value [EX seconds] [PX milliseconds] [NX|XX] | 將字符串值 value 關聯到 key 。 若是 key 已經持有其餘值, SET 就覆寫舊值,無視類型 |
SET key "value" |
MSET | MSET key value [key value ...] | 同時設置一個或多個 key-value 對。 若是某個給定 key 已經存在,那麼 MSET 會用新值覆蓋原來的舊值,若是這不是你所但願的效果,請考慮使用 MSETNX 命令:它只會在全部給定 key 都不存在的狀況下進行設置操做 |
MSET date "2012.3.30" time "11:00 a.m." weather "sunny" |
SETNX | SETNX key value | 將 key 的值設爲 value ,當且僅當 key 不存在。 若給定的 key 已經存在,則 SETNX 不作任何動做 SETNX 是『SET if Not eXists』(若是不存在,則 SET)的簡寫 |
|
MSETNX | MSETNX key value [key value ...] | 同時設置一個或多個 key-value 對,當且僅當全部給定 key 都不存在。 即便只有一個給定 key 已存在, MSETNX 也會拒絕執行全部給定 key 的設置操做 |
|
SETRANGE | SETRANGE key offset value | 用 value 參數覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始。 不存在的 key 看成空白字符串處理 |
|
SETBIT | SETBIT key offset value | 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit) | GETBIT bit 100 # bit 默認被初始化爲 0 |
SETEX | SETEX key seconds value | 將值 value 關聯到 key ,並將 key 的生存時間設爲 seconds (以秒爲單位)。 若是 key 已經存在, SETEX 命令將覆寫舊值。 |
|
PSETEX | PSETEX key milliseconds value | 這個命令和 SETEX 命令類似,但它以毫秒爲單位設置 key 的生存時間,而不是像 SETEX 命令那樣,以秒爲單位 | |
STRLEN | STRLEN key | 返回 key 所儲存的字符串值的長度。 當 key 儲存的不是字符串值時,返回一個錯誤 |
|
GET | GET key | 返回 key 所關聯的字符串值。 若是 key 不存在那麼返回特殊值 nil |
|
MGET | MGET key [key ...] | 返回全部(一個或多個)給定 key 的值。 若是給定的 key 裏面,有某個 key 不存在,那麼這個 key 返回特殊值 nil 。所以,該命令永不失敗 |
|
GETRANGE | GETRANGE key start end | 返回 key 中字符串值的子字符串,字符串的截取範圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。 負數偏移量表示從字符串最後開始計數, -1 表示最後一個字符, -2 表示倒數第二個,以此類推。 |
GETRANGE greeting 0 4 |
GETSET | GETSET key value | 將給定 key 的值設爲 value ,並返回 key 的舊值(old value)。 當 key 存在但不是字符串類型時,返回一個錯誤。 |
|
GETBIT | GETBIT key offset | 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。 當 offset 比字符串值的長度大,或者 key 不存在時,返回 0 |
|
APPEND | APPEND key value | 若是 key 已經存在而且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。 若是 key 不存在, APPEND 就簡單地將給定 key 設爲 value ,就像執行 SET key value 同樣 |
|
DECR | DECR key | 將 key 中儲存的數字值減一。 若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 DECR 操做 |
redis> SET failure_times 10 OK redis> DECR failure_times (integer) 9 |
DECRBY | DECRBY key decrement | 將 key 所儲存的值減去減量 decrement | |
INCR | INCR key | 將 key 中儲存的數字值增一。 若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 INCR 操做 |
|
INCRBY | INCRBY key increment | 將 key 所儲存的值加上增量 increment | |
INCRBYFLOAT | INCRBYFLOAT key increment | 爲 key 中所儲存的值加上浮點數增量 increment | INCRBYFLOAT mykey 0.1 |
BITCOUNT | BITCOUNT key [start] [end] | 計算給定字符串中,被設置爲 1 的比特位的數量 | |
BITOP | BITOP operation destkey key [key ...] | 對一個或多個保存二進制位的字符串 key 進行位元操做,並將結果保存到 destkey 上。 |
List(列表)經常使用命令spa
命令 | 用法 | 描述 | 示例 |
LPUSH | LPUSH key value [value ...] | 將一個或多個值 value 插入到列表 key 的表頭 若是有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭 |
正着進反着出 |
LPUSHX | LPUSHX key value | 將值 value 插入到列表 key 的表頭,當且僅當 key 存在而且是一個列表。 和 LPUSH 命令相反,當 key 不存在時, LPUSHX 命令什麼也不作 |
|
RPUSH | RPUSH key value [value ...] | 將一個或多個值 value 插入到列表 key 的表尾(最右邊) | 怎麼進怎麼出 |
RPUSHX | RPUSHX key value | 將值 value 插入到列表 key 的表尾,當且僅當 key 存在而且是一個列表。 和 RPUSH 命令相反,當 key 不存在時, RPUSHX 命令什麼也不作。 |
|
LPOP | LPOP key | 移除並返回列表 key 的頭元素。 | |
BLPOP | BLPOP key [key ...] timeout | 移出並獲取列表的第一個元素, 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止 | |
RPOP | RPOP key | 移除並返回列表 key 的尾元素。 | |
BRPOP | BRPOP key [key ...] timeout | 移出並獲取列表的最後一個元素, 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止。 | |
BRPOPLPUSH | BRPOPLPUSH source destination timeout | 從列表中彈出一個值,將彈出的元素插入到另一個列表中並返回它; 若是列表沒有元素會阻塞列表直到等待超時或發現可彈出元素爲止。 | |
RPOPLPUSH | RPOPLPUSH source destination | 命令 RPOPLPUSH 在一個原子時間內,執行如下兩個動做:將列表 source 中的最後一個元素(尾元素)彈出,並返回給客戶端。 將 source 彈出的元素插入到列表 destination ,做爲 destination 列表的的頭元素 |
RPOPLPUSH list01 list02 |
LSET | LSET key index value | 將列表 key 下標爲 index 的元素的值設置爲 value | |
LLEN | LLEN key | 返回列表 key 的長度。 若是 key 不存在,則 key 被解釋爲一個空列表,返回 0 . 若是 key 不是列表類型,返回一個錯誤 |
|
LINDEX | LINDEX key index | 返回列表 key 中,下標爲 index 的元素。 下標(index)參數 start 和 stop 都以 0 爲底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。 |
|
LRANGE | LRANGE key start stop | 返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定 | |
LREM | LREM key count value | 根據參數 count 的值,移除列表中與參數 value 相等的元素 | |
LTRIM | LTRIM key start stop | 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間以內的元素都將被刪除 | |
LINSERT | LINSERT key BEFORE|AFTER pivot value | 將值 value 插入到列表 key 當中,位於值 pivot 以前或以後。 當 pivot 不存在於列表 key 時,不執行任何操做。 當 key 不存在時, key 被視爲空列表,不執行任何操做。 若是 key 不是列表類型,返回一個錯誤。 |
LINSERT list01 before c++ c#(在c++以前加上C#) |
Hash(哈希表)經常使用命令unix
命令 | 用法 | 描述 | 示例 |
HSET | HSET key field value | 將哈希表 key 中的域 field 的值設爲 value 。 若是 key 不存在,一個新的哈希表被建立並進行 HSET 操做。 若是域 field 已經存在於哈希表中,舊值將被覆蓋。 |
|
HMSET | HMSET key field value [field value ...] | 同時將多個 field-value (域-值)對設置到哈希表 key 中。 此命令會覆蓋哈希表中已存在的域。 |
|
HSETNX | HSETNX key field value | 將哈希表 key 中的域 field 的值設置爲 value ,當且僅當域 field 不存在。 若域 field 已經存在,該操做無效 |
|
HGET | HGET key field | 返回哈希表 key 中給定域 field 的值 | |
HMGET | HMGET key field [field ...] | 返回哈希表 key 中,一個或多個給定域的值。 | |
HGETALL | HGETALL key | 返回哈希表 key 中,全部的域和值。 在返回值裏,緊跟每一個域名(field name)以後是域的值(value),因此返回值的長度是哈希表大小的兩倍 |
|
HDEL | HDEL key field [field ...] | 刪除哈希表 key 中的一個或多個指定域,不存在的域將被忽略 | |
HEXISTS | HEXISTS key field | 查看哈希表 key 中,給定域 field 是否存在 | |
HLEN | HLEN key | 返回哈希表 key 中域的數量 | |
HKEYS | HKEYS key | 返回哈希表 key 中的全部域 | |
HVALS | HVALS key | 返回哈希表 key 中全部域的值 | |
HSTRLEN | HSTRLEN key field | 返回哈希表 key 中, 與給定域 field 相關聯的值的字符串長度(string length)。 若是給定的鍵或者域不存在, 那麼命令返回 0 |
|
HINCRBY | HINCRBY key field increment | 爲哈希表 key 中的域 field 的值加上增量 increment | |
HINCRBYFLOAT | HINCRBYFLOAT key field increment | 爲哈希表 key 中的域 field 加上浮點數增量 increment | |
HSCAN | HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的鍵值對。 |
Set(集合)經常使用命令對象
命令 | 用法 | 描述 | 示例 |
SADD | SADD key member [member ...] | 將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。 假如 key 不存在,則建立一個只包含 member 元素做成員的集合。 當 key 不是集合類型時,返回一個錯誤 |
|
SCARD | SCARD key | 返回集合 key 的基數(集合中元素的數量)。 | |
SDIFF | SDIFF key [key ...] | 返回一個集合的所有成員,該集合是全部給定集合之間的差集。 不存在的 key 被視爲空集。 |
差集 |
SDIFFSTORE | SDIFFSTORE destination key [key ...] | 這個命令的做用和 SDIFF 相似,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 若是 destination 集合已經存在,則將其覆蓋。 destination 能夠是 key 自己。 |
|
SINTER | SINTER key [key ...] | 返回一個集合的所有成員,該集合是全部給定集合的交集。 不存在的 key 被視爲空集。 當給定集合當中有一個空集時,結果也爲空集(根據集合運算定律) |
交集 |
SINTERSTORE | SINTERSTORE destination key [key ...] | 這個命令相似於 SINTER 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 若是 destination 集合已經存在,則將其覆蓋。 destination 能夠是 key 自己 |
|
SUNION | SUNION key [key ...] | 返回一個集合的所有成員,該集合是全部給定集合的並集。 不存在的 key 被視爲空集 |
並集 |
SUNIONSTORE | SUNIONSTORE destination key [key ...] | 這個命令相似於 SUNION 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集。 若是 destination 已經存在,則將其覆蓋。 destination 能夠是 key 自己 |
|
SMEMBERS | SMEMBERS key | 返回集合 key 中的全部成員。 不存在的 key 被視爲空集合 |
|
SRANDMEMBER | SRANDMEMBER key [count] | 若是命令執行時,只提供了 key 參數,那麼返回集合中的一個隨機元素 | |
SISMEMBER | SISMEMBER key member | 判斷 member 元素是否集合 key 的成員 | |
SMOVE | SMOVE source destination member | 將 member 元素從 source 集合移動到 destination 集合。 | |
SPOP | SPOP key | 移除並返回集合中的一個隨機元素。 若是隻想獲取一個隨機元素,但不想該元素從集合中被移除的話,可使用 SRANDMEMBER 命令。 |
|
SREM | SREM key member [member ...] | 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。 當 key 不是集合類型,返回一個錯誤 |
|
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
SortedSet(有序集合)經常使用命令
命令 | 用法 | 描述 | 示例 |
ZADD | ZADD key score1 member1 [score2 member2] | 向有序集合添加一個或多個成員,或者更新已存在成員的分數 | |
ZCARD | ZCARD key | 返回有序集 key 的基數。 | |
ZCOUNT | ZCOUNT key min max | 返回有序集 key 中, score 值在 min 和 max 之間(默認包括 score 值等於 min 或 max )的成員的數量。 關於參數 min 和 max 的詳細使用方法,請參考 ZRANGEBYSCORE 命令。 |
|
ZRANGE | ZRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定區間內的成員。 其中成員的位置按 score 值遞增(從小到大)來排序 |
|
ZREVRANGE | ZREVRANGE key start stop [WITHSCORES] | 返回有序集 key 中,指定區間內的成員。其中成員的位置按 score 值遞減(從大到小)來排列。 具備相同 score 值的成員按字典序的逆序(reverse lexicographical order)排列。除了成員按 score 值遞減的次序排列這一點外, ZREVRANGE 命令的其餘方面和 ZRANGE 命令同樣。 |
|
ZREVRANGEBYSCORE | ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中, score 值介於 max 和 min 之間(默認包括等於 max 或 min )的全部的成員。有序集成員按 score 值遞減(從大到小)的次序排列。 | |
ZREVRANK | ZREVRANK key member | 返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞減(從大到小)排序。 排名以 0 爲底,也就是說, score 值最大的成員排名爲 0 。 使用 ZRANK 命令能夠得到成員按 score 值遞增(從小到大)排列的排名。 |
|
ZSCORE | ZSCORE key member | 返回有序集 key 中,成員 member 的 score 值。 若是 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。 |
|
ZRANGEBYSCORE | ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | 返回有序集 key 中,全部 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。有序集成員按 score 值遞增(從小到大)次序排列。 | |
ZRANK | ZRANK key member | 返回有序集 key 中成員 member 的排名。其中有序集成員按 score 值遞增(從小到大)順序排列。 | |
ZINCRBY | ZINCRBY key increment member | 爲有序集 key 的成員 member 的 score 值加上增量 increment | |
ZREM | ZREM key member [member ...] | 移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。 當 key 存在但不是有序集類型時,返回一個錯誤。 |
|
ZREMRANGEBYRANK | ZREMRANGEBYRANK key start stop | 移除有序集 key 中,指定排名(rank)區間內的全部成員 | |
ZREMRANGEBYSCORE | ZREMRANGEBYSCORE key min max | 移除有序集 key 中,全部 score 值介於 min 和 max 之間(包括等於 min 或 max )的成員。 | |
ZUNIONSTORE | ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] | 計算給定的一個或多個有序集的並集,其中給定 key 的數量必須以 numkeys 參數指定,並將該並集(結果集)儲存到 destination 。 默認狀況下,結果集中某個成員的 score 值是全部給定集下該成員 score 值之 和 。 |
|
ZINTERSTORE | ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] | 計算給定的一個或多個有序集的交集,其中給定 key 的數量必須以 numkeys 參數指定,並將該交集(結果集)儲存到 destination 。 默認狀況下,結果集中某個成員的 score 值是全部給定集下該成員 score 值之和. |
|
ZSCAN | ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成員和元素分值) | |
ZRANGEBYLEX | ZRANGEBYLEX key min max [LIMIT offset count] | 當有序集合的全部成員都具備相同的分值時, 有序集合的元素會根據成員的字典序(lexicographical ordering)來進行排序, 而這個命令則能夠返回給定的有序集合鍵 key 中, 值介於 min 和 max 之間的成員。 |
|
ZLEXCOUNT | ZLEXCOUNT key min max | 對於一個全部成員的分值都相同的有序集合鍵 key 來講, 這個命令會返回該集合中, 成員介於 min 和 max 範圍內的元素數量。 這個命令的 min 參數和 max 參數的意義和 ZRANGEBYLEX 命令的 min 參數和 max 參數的意義同樣 |
|
ZREMRANGEBYLEX | ZREMRANGEBYLEX key min max | 對於一個全部成員的分值都相同的有序集合鍵 key 來講,這個命令會移除該集合中,成員介於 min 和 max 範圍內的全部元素。這個命令的 min 參數和 max 參數的意義和 ZRANGEBYLEX 命令的 min 參數和 max 參數的意義同樣 |