Redis String 類型和 Hash 類型學習筆記與總結_Redis

來源:互聯網
上載者:User

Linux 版本資訊:

複製代碼 代碼如下:

cat /etc/issue  或cat /etc/redhat-release(Linux查看版本當前作業系統發行版資訊)

CentOS release 6.6 (Final)

(一)String 類型

【定義】string 是最簡單的類型,你可以理解成與 Memcached 是一模一樣的類型,一個 key 對應一個 value,其上支援的操作與 Memcached 的操作類似。但它的功能更豐富。

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

【操作】

① set 方法

設定 key 對應的值為 string 類型的 value。

【例】添加 name = dee 的索引值對:

複製代碼 代碼如下:

127.0.0.1:6379> set name dee
OK

設定成功。

② get 方法

【例】

複製代碼 代碼如下:

127.0.0.1:6379> get name
"dee"

擷取成功。

 

再次設定 name = deathmask,值會被覆蓋:

複製代碼 代碼如下:

127.0.0.1:6379> set name deathmask
OK

127.0.0.1:6379> get name
"deathmask"

③ setnx 方法

設定 key 對應的值為 string 類型的 value,如果 key 已經存在,返回 0,nx 表示 not exist。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> setnx name dee
(integer) 0


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 已經存在而且沒有更改,app 不存在則成功 set。

④ setex 方法

設定 key 對應的值為 string 類型的 value,並指定  此索引值 對應的有效期間。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> setex mobile 10 iphone
OK

127.0.0.1:6379> get mobile
"iphone"


127.0.0.1:6379> get mobile
"iphone"


127.0.0.1:6379> get mobile
(nil)

設定 mobile 的值為 iPhone,並且指定有效期間為 10 秒。

⑤ setrange 方法

設定指定 key 的 value 值的子字串

【例】將 dee 的 126 郵箱 替換為 gmail 郵箱

複製代碼 代碼如下:

127.0.0.1:6379> set email dee@126.com
OK

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"


其中 4 代表下標,(integer) 13 表示字串的長度。

【例2】

複製代碼 代碼如下:

127.0.0.1:6379> set email dee@vip.ofim.com
OK

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 方法

一次設定多個 key 值,成功返回 ok,表示所有的值都設定了,失敗返回 0,表示沒有任何值被設定。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> mset key1 dee1 key2 dee2
OK

127.0.0.1:6379> get key1
"dee1"


127.0.0.1:6379> get key2
"dee2"

⑦ msetnx 方法

一次設定多個 key 的值,成功返回 1,表示所有的值都被設定了。失敗返回 0 ,表示沒有任何值被設定,但是不會覆蓋已經存在的 key。

複製代碼 代碼如下:

127.0.0.1:6379> msetnx key3 dee3 key4 dee4
(integer) 1


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)


⑧ getset 方法

設定 key 的值,並返回 key 的舊值。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> getset key1 emperor
"dee1"

⑨ getrange 方法

擷取 key 的 value 值的子字串。

複製代碼 代碼如下:

127.0.0.1:6379> get email
"dee@gmail.comcom"


127.0.0.1:6379> getrange email 0 12
"dee@gmail.com"


返回第 0 到第12 個字元。
⑩ mget 方法

一次擷取多個 key 的值,如果對應 key 不存在則對應返回 nil。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "emperor"
2) "dee2"
3) "dee3"
4) "dee4"
5) (nil)

⑪ incr 方法
對 key 的值做 加加 操作,並返回新的值。

【例】每次遞增1

複製代碼 代碼如下:

127.0.0.1:6379> set age 28
OK

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"


【例2】
複製代碼 代碼如下:

127.0.0.1:6379> get real-age
(nil)

127.0.0.1:6379> incr real-age
(integer) 1


127.0.0.1:6379> get real-age
"1"

⑫ incrby 方法

同 incr 方法類似,加指定值,key 不存在時會設定 key,並認為原來的 value 為 0。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> get times
(nil)

127.0.0.1:6379> incrby times 5
(integer) 5


127.0.0.1:6379> get times
"5"


【例2】
複製代碼 代碼如下:

127.0.0.1:6379> incrby times -5
(integer) 0


127.0.0.1:6379> get times
"0"

⑬ decr 方法

對 key 的值做 減減操作。

⑭ decrby 方法

同 decr 方法類似,減指定值。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> get age
"30"


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 ,返回新字串的長度。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> get name
"deathmask"


127.0.0.1:6379> append name @163.com
(integer) 17


127.0.0.1:6379> get name
"deathmask@163.com"

⑯ strlen 方法

取指定 key 的 value 值的長度。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> get name
"deathmask@163.com"


127.0.0.1:6379> strlen name
(integer) 17

(二)Hash 類型

Redis hash 是一個 string 類型的 field 和 value 的 映射表。它的添加、刪除操作都是 0(1)(平均操作)。

hash 特別 適合用於儲存物件。相較於將對象的每個欄位存成單個 string 類型(string 類型可以儲存物件序列化)。

將一個Object Storage Service在 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 方法 / hget 方法

設定hash field 為指定值,如果 key 不存在,則先建立。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hset myhash field1 hello
(integer) 1

說明:myhash 是 hash 表的名稱,field1 是 hash 表的一個欄位,hello 是這個欄位對應的值。儲存使用者比較方便。

【例2】

複製代碼 代碼如下:

127.0.0.1:6379> hset user:001 name dee
(integer) 1


127.0.0.1:6379> hget user:001 name
"dee"

說明:設定 user 表 id 為 001 的使用者,使用者名稱為 dee。

 可以把 user:001 看作一張表。

② hsetnx 方法

設定 hash field 為指定值,如果 key 不存在,則先建立;如果存在,則返回 0。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hsetnx myhash field "hello"
(integer) 1


127.0.0.1:6379> hsetnx myhash field "hello!"
(integer) 0


127.0.0.1:6379> hget myhash field
"hello"

③ hmset 方法

同時設定 hash 的多個 field

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hmset user:002 name dee specialty php
OK

127.0.0.1:6379> hget user:002 name
"dee"


127.0.0.1:6379> hget user:002 specialty
"php"

④ hget 方法

擷取全部指定的 hash field。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hmget user:002 name specialty
1) "dee"
2) "php"

⑤ hincrby 方法

指定的 hash field 加上給定值。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hmset user:002 name dee specialty redis age 28
OK

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 方法

測試指定 field 是否存在。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hexists user:002 name
(integer) 1


127.0.0.1:6379> hexists user:002 sex
(integer) 0


⑦ hlen 方法

返回指定 hash 的 field 數量。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hlen user:002
(integer) 3

⑧ hdel 方法

刪除指定 hash 的 field。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hdel user:002 age
(integer) 1


127.0.0.1:6379> hget user:002 age
(nil)


⑨ hkeys 方法(類似 PHP 中 array_keys() 方法)

返回 hash 的所有 field。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hkeys user:002
1) "name"
2) "specialty"

⑩ hvals 方法(類似 PHP 中的 array_values() 方法)

返回 hash 的所有 value。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hvals user:002
1) "dee"
2) "redis"

⑪ hgetall 方法

擷取某個 hash 中全部的 field 及 value。

【例】

複製代碼 代碼如下:

127.0.0.1:6379> hgetall user:002
1) "name"
2) "dee"
3) "specialty"
4) "redis"

【總結】設定 hash 類型的資料,首先要設定 hash 的表,然後設定 hash 的 field,最後設定 hash field 的 value。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.