redis key和value數據類型


exists key 

del key1 key2

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

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

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

set a 1 后get  a 返回的是“1”,並且type a是字符串。
get key 獲取 key對應的 string值,如果 key不存在返回 nil
getset key value 先獲取 key的值,再設置 key的值。如果 key不存在返回 nil。

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不存在,則創建

返回值:
如果  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 數量。

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM