redis key和value數據類型

exists key html

del key1 key2python

Redis 的vaule
redis 提供五種數據類型:string,hash,list,set 及sorted set。mysql

string 是最基本的類型,而且string 類型是二進制安全的。意思是redis 的string 能夠
包含任何數據。好比jpg 圖片或者序列化的對象。從內部實現來看其實string 能夠看做byte數組,最大上限是1G 字節。web

set key value 設置 key對應 string 類型的值,返回 1 表示成功,0失敗。
setnx key value 若是 key 不存在,設置 key 對應 string 類型的值。若是 key 已經存在,返
回0。SET if Not eXists』 redis

set a 1 後get  a 返回的是「1」,而且type a是字符串。
get key 獲取 key對應的 string值,若是 key不存在返回 nil
getset key value 先獲取 key的值,再設置 key的值。若是 key不存在返回 nil。sql

mget key1 key2 ...... keyN 一次獲取多個key 的值,若是對應 key不存在,則對應返回 nil
mset key1 value1 ...... keyN valueN 一次設置多個 key的值,成功返回 1表示全部的值都設置
了,失敗返回0 表示沒有任何值被設置。
msetnx key1 value1 ...... keyN valueN 一次設置多個 key的值,可是不會覆蓋已經存在的 key
incr key 對 key 的值作++操做,並返回新的值。注意 incr一個不是 int 的 value 會返回錯
誤,incr 一個不存在的key,則設置key 值爲1。
decr key 對 key的值作--操做,decr一個不存在 key,則設置 key值爲-1。
incrby key integer 對 key 加上指定值 ,key 不存在時候會設置 key,並認爲原來的 value
是0。
decrby key integer 對key減去指定值。decrby徹底是爲了可讀性,咱們徹底能夠經過incrby
一個負值來實現一樣效果,反之同樣。數組

 

2.2.2. hash 類型
hash 是一個string 類型的field 和value 的映射表。添加,刪除操做都是O(1)(平均)。
hash 特別適合用於存儲對象。相對於將對象的每一個字段存成單個string 類型。將一個對象
存儲在hash 類型中會佔用更少的內存,而且能夠更方便的存取整個對象。省內存的緣由是
新建一個hash 對象時開始是用zipmap(又稱爲small hash)來存儲的。這個zipmap 其實並
不是hash table,可是zipmap 相比正常的hash 實現能夠節省很多hash 自己須要的一些元
數據存儲開銷。儘管zipmap 的添加,刪除,查找都是O(n),可是因爲通常對象的field
數量都不太多。因此使用zipmap 也是很快的,也就是說添加刪除平均仍是O(1)。若是field
或者value 的大小超出必定限制後,redis 會在內部自動將zipmap 替換成正常的hash 實現.
這個限制能夠在配置文件中指定。
hash-max-zipmap-entries 64 #配置字段最多64 個
hash-max-zipmap-value 512 #配置value 最大爲512 字節安全

 

hset key field value 設置 hash field爲指定值,若是 key不存在,則建立session

返回值:
若是  field 是哈希表中的一個新建域,而且值設置成功,返回  1 。
若是哈希表中域  field 已經存在且舊值已被新值覆蓋,返回  0 。
redis> HSET website google "www.g.cn"       # 設置一個新域
(integer) 1

redis> HSET website google "www.google.com" # 覆蓋一箇舊域
(integer) 0

hget key field 獲取指定的 hash field。
hmget key filed1....fieldN 獲取所有指定的 hash filed。
hmset key filed1 value1 ...... filedN valueN 同時設置hash的多個 field。
hincrby key field integer 將指定的 hash filed 加上指定值。成功返回 hash filed 變動後的
值。
hexists key field 檢測指定 field是否存在。
hdel key field 刪除指定的 hash field。
hlen key 返回指定 hash的 field 數量。ide

hkeys key 返回 hash 的全部 field。
hvals key 返回 hash的全部 value。
hgetall 返回 hash的全部 filed和 value

 

list類型:參考:http://www.cnblogs.com/youxin/p/3585867.html

 

2.2.4. set 類型
set 是無序集合,最大能夠包含(2 的32 次方-1)個元素。set 的是經過hash table 實現的,
因此添加,刪除,查找的複雜度都是O(1)。hash table 會隨着添加或者刪除自動的調整大小。
須要注意的是調整hash table 大小時候須要同步(獲取寫鎖)會阻塞其餘讀寫操做。可能不
久後就會改用跳表(skip list)來實現。跳錶已經在sorted sets 中使用了。關於set 集合類型
除了基本的添加刪除操做,其它有用的操做還包含集合的取並集(union),交集(intersection),
差集(difference)。經過這些操做能夠很容易的實現SNS 中的好友推薦和blog 的tag 功能。

SADD key member [member ...]

將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。

假如 key 不存在,則建立一個只包含 member 元素做成員的集合。

當 key 不是集合類型時,返回一個錯誤。

# 添加單個元素

redis> SADD bbs "discuz.net"
(integer) 1


# 添加劇復元素

redis> SADD bbs "discuz.net"
(integer) 0


# 添加多個元素

redis> SADD bbs "tianya.cn" "groups.google.com"
(integer) 2

redis> SMEMBERS bbs
1) "discuz.net"
2) "groups.google.com"
3) "tianya.cn"

smembers key 返回集合 key 中的全部成員。

srem key member 從 key 對應 set 中移除指定元素,成功返回 1,若是 member 在集合中不
存在或者key 不存在返回0,若是key 對應的不是set 類型的值返回錯誤。
spop key 刪除並返回 key 對應 set 中隨機的一個元素,若是 set 是空或者 key 不存在返回
nil。
srandmember key 同 spop,隨機取 set中的一個元素,可是不刪除元素。
smove srckey dstkey member 從srckey對應set中移除member並添加到dstkey對應set中,
整個操做是原子的。成功返回1,若是member 在srckey 中不存在返回0,若是key 不是set
類型返回錯誤。
scard key 返回 set的元素個數,若是 set是空或者 key不存在返回 0。
sismember key member 判斷 member 是否在 set 中,存在返回 1,0 表示不存在或者 key 不
存在。
sinter key1 key2 …… keyN 返回全部給定key 的交集。
sinterstore dstkey key1 ....... keyN 返回全部給定 key的交集,並保存交集存到 dstkey下
sunion key1 key2 ...... keyN 返回全部給定 key的並集。
sunionstore dstkey key1 ...... keyN 返回全部給定 key的並集,並保存並集到 dstkey下。
sdiff key1 key2 ...... keyN 返回全部給定 key 的差集。

 

sorted set 類型
sorted set 是有序集合,它在set 的基礎上增長了一個順序屬性,這一屬性在添加修
改元素的時候能夠指定,每次指定後,會自動從新按新的值調整順序。能夠理解了有兩列的
mysql 表,一列存value,一列存順序。操做中key 理解爲sorted set 的名字。

 

ZADD key score member [[score member] [score member] ...]

將一個或多個 member 元素及其 score 值加入到有序集 key 當中。

若是某個 member 已是有序集的成員,那麼更新這個 member 的 score 值,並經過從新插入這個 member 元素,來保證該 member 在正確的位置上。

score 值能夠是整數值或雙精度浮點數。

若是 key 不存在,則建立一個空的有序集並執行 ZADD 操做。

當 key 存在但不是有序集類型時,返回一個錯誤。

對有序集的更多介紹請參見 sorted set 。

# 添加單個元素

redis> ZADD page_rank 10 google.com
(integer) 1


# 添加多個元素

redis> ZADD page_rank 9 baidu.com 8 bing.com
(integer) 2

redis> ZRANGE page_rank 0 -1 WITHSCORES
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 添加已存在元素,且 score 值不變

redis> ZADD page_rank 10 google.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # 沒有改變
1) "bing.com"
2) "8"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"


# 添加已存在元素,可是改變 score 值

redis> ZADD page_rank 6 bing.com
(integer) 0

redis> ZRANGE page_rank 0 -1 WITHSCORES  # bing.com 元素的 score 值被改變
1) "bing.com"
2) "6"
3) "baidu.com"
4) "9"
5) "google.com"
6) "10"

ZREM key member [member ...]

移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。

當 key 存在但不是有序集類型時,返回一個錯誤。

 ZINCRBY key increment member

Increments the score of member in the sorted set stored at key by increment. If member does not exist in the sorted set, it is added with increment as its score (as if its previous score was0.0). If key does not exist, a new sorted set with the specified member as its sole member is created.

An error is returned when key exists but does not hold a sorted set.

The score value should be the string representation of a numeric value, and accepts double precision floating point numbers. It is possible to provide a negative value to decrement the score.

Return value

Bulk string reply: the new score of member (a double precision floating point number), represented as string.

Examples

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"
redis> 

 

參考:https://redis.readthedocs.org/en/latest/

相關文章
相關標籤/搜索