一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis String 類型和 Hash 類型學習筆記與總結

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

2019-10-25 16:43Redis教程網 Redis

這篇文章主要介紹了Redis String 類型和 Hash 類型學習筆記與總結,本文分別對String 類型的一些方法和Hash 類型做了詳細介紹,需要的朋友可以參考下

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 [email protected]
OK

 

127.0.0.1:6379> get email
"[email protected]"


127.0.0.1:6379> setrange email 4 gmail.com
(integer) 13


127.0.0.1:6379> get email
"[email protected]"


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

 

【例2】

復制代碼代碼如下:


127.0.0.1:6379> set email [email protected]
OK

 

127.0.0.1:6379> get email
"[email protected]"


127.0.0.1:6379> setrange email 4 gmail.com
(integer) 16


127.0.0.1:6379> get email
"[email protected]"


說明:如果替換的字符串沒有源字符串長,則只會把源字符串中相同長度的字符替換掉,同時保留源字符串中剩余的字符。

 

⑥ 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
"[email protected]"

 


127.0.0.1:6379> getrange email 0 12
"[email protected]"


返回第 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
"[email protected]"

 

? strlen 方法

取指定 key 的 value 值的長度。

【例】

復制代碼代碼如下:


127.0.0.1:6379> get name
"[email protected]"

 


127.0.0.1:6379> strlen name
(integer) 17

 

(二)Hash 類型

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

hash 特別 適合用于存儲對象。相較于將對象的每個字段存成單個 string 類型(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 方法 / 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。

延伸 · 閱讀

精彩推薦
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
主站蜘蛛池模板: 国产网站免费观看 | 99在线免费观看视频 | 国产欧美又粗又猛又爽老 | 丝袜老师好湿好紧我要进去了 | 亚洲色图影院 | 韩国美女豪爽一级毛片 | 先锋资源久久 | 亚洲国产成人久久综合区 | 男女视频在线观看网站 | 亚洲系列国产精品制服丝袜第 | 2021小妲己永久回家地址 | 国产亚洲综合久久 | 好大用力深一点女公交车 | 色吧| 色老板在线视频观看 | 久久一er精这里有精品 | 情缘1完整版在线观看 | 四虎永久在线精品国产馆v视影院 | 亚洲男人网 | 日韩在线a视频免费播放 | 天堂va在线高清一区 | 日韩经典在线 | 国产麻豆精品原创 | 久久国产综合精品欧美 | 99热这里只有精品国产免费 | 校园高h| 久久精品熟女亚洲AV国产 | 情乱奶水欲 | 免费片在线观看高清 | a一级黄| 日本护士撒尿xxxx18 | 黄情视频 | 成人永久免费福利视频网站 | 99热久久这里只精品国产www | 手机在线观看精品国产片 | 射综合网| 电车痴汉中文字幕 | 精品久久一区 | 成年性香蕉漫画在线观看 | 国产精品成人在线播放 | 亚洲精品九色在线网站 |