Linux 版本信息:
CentOS release 6.6 (Final)
(一)String 類型
【定義】string 是最簡(jiǎn)單的類型,你可以理解成與 Memcached 是一模一樣的類型,一個(gè) key 對(duì)應(yīng)一個(gè) value,其上支持的操作與 Memcached 的操作類似。但它的功能更豐富。
string 類型是二進(jìn)制安全的。意思是 redis 的 string 可以包含任何數(shù)據(jù), 比如 jpg 圖片或者序 列化的對(duì)象。 從內(nèi)部實(shí)現(xiàn)來(lái)看其實(shí) string 可以看作 byte 數(shù)組,最大上限是 1G 字節(jié)。
【操作】
① set 方法
設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value。
【例】添加 name = dee 的鍵值對(duì):
② get 方法
【例】
再次設(shè)置 name = deathmask,值會(huì)被覆蓋:
127.0.0.1:6379> get name
"deathmask"
③ setnx 方法
設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value,如果 key 已經(jīng)存在,返回 0,nx 表示 not exist。
【例】
127.0.0.1:6379> setnx app weibo
(integer) 1
127.0.0.1:6379> get name
"deathmask"
127.0.0.1:6379> get app
"weibo"
表示 name 已經(jīng)存在而且沒(méi)有更改,app 不存在則成功 set。
④ setex 方法
設(shè)置 key 對(duì)應(yīng)的值為 string 類型的 value,并指定 此鍵值 對(duì)應(yīng)的有效期。
【例】
127.0.0.1:6379> get mobile
"iphone"
127.0.0.1:6379> get mobile
"iphone"
127.0.0.1:6379> get mobile
(nil)
設(shè)置 mobile 的值為 iPhone,并且指定有效期為 10 秒。
⑤ setrange 方法
設(shè)定指定 key 的 value 值的子字符串
【例】將 dee 的 126 郵箱 替換為 gmail 郵箱
127.0.0.1:6379> get email
"dee@126.com"
127.0.0.1:6379> setrange email 4 gmail.com
(integer) 13
127.0.0.1:6379> get email
"dee@gmail.com"
【例2】
127.0.0.1:6379> get email
"dee@vip.ofim.com"
127.0.0.1:6379> setrange email 4 gmail.com
(integer) 16
127.0.0.1:6379> get email
"dee@gmail.comcom"
⑥ mset 方法
一次設(shè)置多個(gè) key 值,成功返回 ok,表示所有的值都設(shè)置了,失敗返回 0,表示沒(méi)有任何值被設(shè)置。
【例】
127.0.0.1:6379> get key1
"dee1"
127.0.0.1:6379> get key2
"dee2"
⑦ msetnx 方法
一次設(shè)置多個(gè) key 的值,成功返回 1,表示所有的值都被設(shè)置了。失敗返回 0 ,表示沒(méi)有任何值被設(shè)置,但是不會(huì)覆蓋已經(jīng)存在的 key。
127.0.0.1:6379> msetnx key3 dee333 key4 dee444 key5 dee5
(integer) 0
127.0.0.1:6379> get key3
"dee3"
127.0.0.1:6379> get key4
"dee4"
127.0.0.1:6379> get key5
(nil)
設(shè)置 key 的值,并返回 key 的舊值。
【例】
⑨ getrange 方法
獲取 key 的 value 值的子字符串。
127.0.0.1:6379> getrange email 0 12
"dee@gmail.com"
一次獲取多個(gè) key 的值,如果對(duì)應(yīng) key 不存在則對(duì)應(yīng)返回 nil。
【例】
⑪ incr 方法
對(duì) key 的值做 加加 操作,并返回新的值。
【例】每次遞增1
127.0.0.1:6379> get age
"28"
127.0.0.1:6379> incr age
(integer) 29
127.0.0.1:6379> incr age
(integer) 30
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> incr real-age
(integer) 1
127.0.0.1:6379> get real-age
"1"
⑫ incrby 方法
同 incr 方法類似,加指定值,key 不存在時(shí)會(huì)設(shè)置 key,并認(rèn)為原來(lái)的 value 為 0。
【例】
127.0.0.1:6379> incrby times 5
(integer) 5
127.0.0.1:6379> get times
"5"
127.0.0.1:6379> get times
"0"
⑬ decr 方法
對(duì) key 的值做 減減操作。
⑭ decrby 方法
同 decr 方法類似,減指定值。
【例】
127.0.0.1:6379> decr age
(integer) 29
127.0.0.1:6379> decrby age 10
(integer) 19
127.0.0.1:6379> decrby age -10
(integer) 29
⑮ append 方法(重要)
給指定 key 的字符串追加 value ,返回新字符串的長(zhǎng)度。
【例】
127.0.0.1:6379> append name @163.com
(integer) 17
127.0.0.1:6379> get name
"deathmask@163.com"
⑯ strlen 方法
取指定 key 的 value 值的長(zhǎng)度。
【例】
127.0.0.1:6379> strlen name
(integer) 17
(二)Hash 類型
Redis hash 是一個(gè) string 類型的 field 和 value 的 映射表。它的添加、刪除操作都是 0(1)(平均操作)。
hash 特別 適合用于存儲(chǔ)對(duì)象。相較于將對(duì)象的每個(gè)字段存成單個(gè) string 類型(string 類型可以存儲(chǔ)對(duì)象序列化)。
將一個(gè)對(duì)象存儲(chǔ)在 hash 類型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象。
(省內(nèi)存的原因是新建一個(gè) hash 對(duì)象時(shí)開(kāi)始是用 zipmap(又稱為 small hash)來(lái)存儲(chǔ)的。
這個(gè) zipmap 其實(shí)并不是 hash table,但是 zipmap 相比正常的 hash 實(shí)現(xiàn)可以節(jié)省不少 hash 本身需要的一些元數(shù)據(jù)存儲(chǔ)開(kāi)銷。
盡管 zipmap 的添加,刪除,查找都是 O(n),但是由于一般對(duì)象的 field 數(shù)量都不太多,所以使用 zipmap 也是很快的,也就是說(shuō)添加刪除平均還是 O(1)。
如果 field 或者 value的大小超出一定限制后, Redis 會(huì)在內(nèi)部自動(dòng)將 zipmap 替換成正常的 hash 實(shí)現(xiàn). 這個(gè)限制可以在配置文件中指定。
hash-max-zipmap-entries 64 #配置字段最多 64 個(gè),hash-max-zipmap-value 512 #配置 value 最大為 512 字節(jié))
【操作】
① hset 方法 / hget 方法
設(shè)置hash field 為指定值,如果 key 不存在,則先創(chuàng)建。
【例】
說(shuō)明:myhash 是 hash 表的名稱,field1 是 hash 表的一個(gè)字段,hello 是這個(gè)字段對(duì)應(yīng)的值。存儲(chǔ)用戶比較方便。
【例2】
127.0.0.1:6379> hget user:001 name
"dee"
說(shuō)明:設(shè)置 user 表 id 為 001 的用戶,用戶名為 dee。
可以把 user:001 看作一張表。
② hsetnx 方法
設(shè)置 hash field 為指定值,如果 key 不存在,則先創(chuàng)建;如果存在,則返回 0。
【例】
127.0.0.1:6379> hsetnx myhash field "hello!"
(integer) 0
127.0.0.1:6379> hget myhash field
"hello"
③ hmset 方法
同時(shí)設(shè)置 hash 的多個(gè) field
【例】
127.0.0.1:6379> hget user:002 name
"dee"
127.0.0.1:6379> hget user:002 specialty
"php"
④ hget 方法
獲取全部指定的 hash field。
【例】
⑤ hincrby 方法
指定的 hash field 加上給定值。
【例】
127.0.0.1:6379> hincrby user:002 age -6
(integer) 22
127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "22"
127.0.0.1:6379> hincrby user:002 age 5
(integer) 27
127.0.0.1:6379> hmget user:002 name specialty age
1) "dee"
2) "redis"
3) "27"
⑥ hexists 方法
測(cè)試指定 field 是否存在。
【例】
127.0.0.1:6379> hexists user:002 sex
(integer) 0
返回指定 hash 的 field 數(shù)量。
【例】
刪除指定 hash 的 field。
【例】
127.0.0.1:6379> hget user:002 age
(nil)
返回 hash 的所有 field。
【例】
返回 hash 的所有 value。
【例】
獲取某個(gè) hash 中全部的 field 及 value。
【例】
【總結(jié)】設(shè)置 hash 類型的數(shù)據(jù),首先要設(shè)置 hash 的表,然后設(shè)置 hash 的 field,最后設(shè)置 hash field 的 value。
新聞熱點(diǎn)
疑難解答
圖片精選