最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis String 類(lèi)型和 Hash 類(lèi)型學(xué)習(xí)筆記與總結(jié)

 更新時(shí)間:2015年06月23日 10:06:47   投稿:junjie  
這篇文章主要介紹了Redis String 類(lèi)型和 Hash 類(lèi)型學(xué)習(xí)筆記與總結(jié),本文分別對(duì)String 類(lèi)型的一些方法和Hash 類(lèi)型做了詳細(xì)介紹,需要的朋友可以參考下

Linux 版本信息:

復(fù)制代碼 代碼如下:

cat /etc/issue  或cat /etc/redhat-release(Linux查看版本當(dāng)前操作系統(tǒng)發(fā)行版信息)

CentOS release 6.6 (Final)

(一)String 類(lèi)型

【定義】string 是最簡(jiǎn)單的類(lèi)型,你可以理解成與 Memcached 是一模一樣的類(lèi)型,一個(gè) key 對(duì)應(yīng)一個(gè) value,其上支持的操作與 Memcached 的操作類(lèi)似。但它的功能更豐富。

string 類(lèi)型是二進(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 類(lèi)型的 value。

【例】添加 name = dee 的鍵值對(duì):

復(fù)制代碼 代碼如下:

127.0.0.1:6379> set name dee
OK

設(shè)置成功。

② get 方法

【例】

復(fù)制代碼 代碼如下:

127.0.0.1:6379> get name
"dee"

獲取成功。

 

再次設(shè)置 name = deathmask,值會(huì)被覆蓋:

復(fù)制代碼 代碼如下:

127.0.0.1:6379> set name deathmask
OK

127.0.0.1:6379> get name
"deathmask"

③ setnx 方法

設(shè)置 key 對(duì)應(yīng)的值為 string 類(lèi)型的 value,如果 key 已經(jīng)存在,返回 0,nx 表示 not exist。

【例】

復(fù)制代碼 代碼如下:

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 已經(jīng)存在而且沒(méi)有更改,app 不存在則成功 set。

④ setex 方法

設(shè)置 key 對(duì)應(yīng)的值為 string 類(lèi)型的 value,并指定  此鍵值 對(duì)應(yīng)的有效期。

【例】

復(fù)制代碼 代碼如下:

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)

設(shè)置 mobile 的值為 iPhone,并且指定有效期為 10 秒。

⑤ setrange 方法

設(shè)定指定 key 的 value 值的子字符串

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

復(fù)制代碼 代碼如下:

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 代表下標(biāo),(integer) 13 表示字符串的長(zhǎng)度。

【例2】

復(fù)制代碼 代碼如下:

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"


說(shuō)明:如果替換的字符串沒(méi)有源字符串長(zhǎng),則只會(huì)把源字符串中相同長(zhǎng)度的字符替換掉,同時(shí)保留源字符串中剩余的字符。

⑥ mset 方法

一次設(shè)置多個(gè) key 值,成功返回 ok,表示所有的值都設(shè)置了,失敗返回 0,表示沒(méi)有任何值被設(shè)置。

【例】

復(fù)制代碼 代碼如下:

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

一次設(shè)置多個(gè) key 的值,成功返回 1,表示所有的值都被設(shè)置了。失敗返回 0 ,表示沒(méi)有任何值被設(shè)置,但是不會(huì)覆蓋已經(jīng)存在的 key。

復(fù)制代碼 代碼如下:

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

設(shè)置 key 的值,并返回 key 的舊值。

【例】

復(fù)制代碼 代碼如下:

127.0.0.1:6379> getset key1 emperor
"dee1"

⑨ getrange 方法

獲取 key 的 value 值的子字符串。

復(fù)制代碼 代碼如下:

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


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


返回第 0 到第12 個(gè)字符。
⑩ mget 方法

一次獲取多個(gè) key 的值,如果對(duì)應(yīng) key 不存在則對(duì)應(yīng)返回 nil。

【例】

復(fù)制代碼 代碼如下:

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

⑪ incr 方法
對(duì) key 的值做 加加 操作,并返回新的值。

【例】每次遞增1

復(fù)制代碼 代碼如下:

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】
復(fù)制代碼 代碼如下:

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 方法類(lèi)似,加指定值,key 不存在時(shí)會(huì)設(shè)置 key,并認(rèn)為原來(lái)的 value 為 0。

【例】

復(fù)制代碼 代碼如下:

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】
復(fù)制代碼 代碼如下:

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


127.0.0.1:6379> get times
"0"

⑬ decr 方法

對(duì) key 的值做 減減操作。

⑭ decrby 方法

同 decr 方法類(lèi)似,減指定值。

【例】

復(fù)制代碼 代碼如下:

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 ,返回新字符串的長(zhǎng)度。

【例】

復(fù)制代碼 代碼如下:

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 值的長(zhǎng)度。

【例】

復(fù)制代碼 代碼如下:

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


127.0.0.1:6379> strlen name
(integer) 17

(二)Hash 類(lèi)型

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

hash 特別 適合用于存儲(chǔ)對(duì)象。相較于將對(duì)象的每個(gè)字段存成單個(gè) string 類(lèi)型(string 類(lèi)型可以存儲(chǔ)對(duì)象序列化)。

將一個(gè)對(duì)象存儲(chǔ)在 hash 類(lèi)型中會(huì)占用更少的內(nèi)存,并且可以更方便的存取整個(gè)對(duì)象。

(省內(nèi)存的原因是新建一個(gè) hash 對(duì)象時(shí)開(kāi)始是用 zipmap(又稱(chēng)為 small hash)來(lái)存儲(chǔ)的。

這個(gè) zipmap 其實(shí)并不是 hash table,但是 zipmap 相比正常的 hash 實(shí)現(xiàn)可以節(jié)省不少 hash 本身需要的一些元數(shù)據(jù)存儲(chǔ)開(kāi)銷(xiāo)。

盡管 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)建。

【例】

復(fù)制代碼 代碼如下:

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

說(shuō)明:myhash 是 hash 表的名稱(chēng),field1 是 hash 表的一個(gè)字段,hello 是這個(gè)字段對(duì)應(yīng)的值。存儲(chǔ)用戶比較方便。

【例2】

復(fù)制代碼 代碼如下:

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


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。

【例】

復(fù)制代碼 代碼如下:

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

同時(shí)設(shè)置 hash 的多個(gè) field

【例】

復(fù)制代碼 代碼如下:

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。

【例】

復(fù)制代碼 代碼如下:

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

⑤ hincrby 方法

指定的 hash field 加上給定值。

【例】

復(fù)制代碼 代碼如下:

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

測(cè)試指定 field 是否存在。

【例】

復(fù)制代碼 代碼如下:

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 數(shù)量。

【例】

復(fù)制代碼 代碼如下:

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

⑧ hdel 方法

刪除指定 hash 的 field。

【例】

復(fù)制代碼 代碼如下:

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


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


⑨ hkeys 方法(類(lèi)似 PHP 中 array_keys() 方法)

返回 hash 的所有 field。

【例】

復(fù)制代碼 代碼如下:

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

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

返回 hash 的所有 value。

【例】

復(fù)制代碼 代碼如下:

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

⑪ hgetall 方法

獲取某個(gè) hash 中全部的 field 及 value。

【例】

復(fù)制代碼 代碼如下:

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

【總結(jié)】設(shè)置 hash 類(lèi)型的數(shù)據(jù),首先要設(shè)置 hash 的表,然后設(shè)置 hash 的 field,最后設(shè)置 hash field 的 value。

相關(guān)文章

  • Redis整合Lua腳本的實(shí)現(xiàn)操作

    Redis整合Lua腳本的實(shí)現(xiàn)操作

    Redis對(duì)lua腳本的支持是從Redis2.6.0版本開(kāi)始引入的,它可以讓用戶在Redis服務(wù)器內(nèi)置的Lua解釋器中執(zhí)行指定的lua腳本,本文就來(lái)介紹一下Redis整合Lua腳本的實(shí)現(xiàn),感興趣的可以了解一下
    2024-03-03
  • Redis分布式可重入鎖實(shí)現(xiàn)方案

    Redis分布式可重入鎖實(shí)現(xiàn)方案

    在單進(jìn)程環(huán)境下,要保證一個(gè)代碼塊的同步執(zhí)行,直接用synchronized 關(guān)鍵字或ReetrantLock 即可,在分布式環(huán)境下,要保證多個(gè)節(jié)點(diǎn)的線程對(duì)代碼塊的同步訪問(wèn),就必須要用到分布式鎖方案,本文介紹一下基于 Redis實(shí)現(xiàn)的分布式鎖方案,感興趣的朋友一起看看吧
    2024-02-02
  • Redis集群的搭建圖文教程

    Redis集群的搭建圖文教程

    下面小編就為大家分享一篇Redis集群的搭建圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 分布式利器redis及redisson的延遲隊(duì)列實(shí)踐

    分布式利器redis及redisson的延遲隊(duì)列實(shí)踐

    這篇文章為大家主要介紹了分布式利器redis及redisson的延遲隊(duì)列實(shí)踐,搜遍全網(wǎng)好像還沒(méi)有使用redisson的延遲隊(duì)列的,redisson作為一個(gè)分布式利器,這么好用的工具沒(méi)人用有點(diǎn)可惜
    2022-03-03
  • 超強(qiáng)、超詳細(xì)Redis數(shù)據(jù)庫(kù)入門(mén)教程

    超強(qiáng)、超詳細(xì)Redis數(shù)據(jù)庫(kù)入門(mén)教程

    這篇文章主要介紹了超強(qiáng)、超詳細(xì)Redis入門(mén)教程,本文詳細(xì)介紹了Redis數(shù)據(jù)庫(kù)各個(gè)方面的知識(shí),需要的朋友可以參考下
    2014-10-10
  • springboot中redis并發(fā)鎖的等待時(shí)間設(shè)置長(zhǎng)短的方法

    springboot中redis并發(fā)鎖的等待時(shí)間設(shè)置長(zhǎng)短的方法

    在SpringBoot應(yīng)用中,Redis鎖的等待時(shí)間設(shè)置不當(dāng)可能導(dǎo)致資源浪費(fèi)、響應(yīng)時(shí)間增加、死鎖風(fēng)險(xiǎn)升高、系統(tǒng)負(fù)載增加、業(yè)務(wù)邏輯延遲以及故障恢復(fù)慢等問(wèn)題,建議合理設(shè)置等待時(shí)間,并考慮使用其他分布式鎖實(shí)現(xiàn)方式提高性能
    2024-10-10
  • Linux下Redis集群搭建全過(guò)程(主從+哨兵)

    Linux下Redis集群搭建全過(guò)程(主從+哨兵)

    這篇文章主要介紹了Linux下Redis集群搭建全過(guò)程(主從+哨兵),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Redis實(shí)現(xiàn)Session持久化的示例代碼

    Redis實(shí)現(xiàn)Session持久化的示例代碼

    Redis是內(nèi)存數(shù)據(jù)庫(kù),數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中,為了避免服務(wù)器斷電等原因?qū)е翿edis進(jìn)程異常退出后數(shù)據(jù)的永久丟失,本文主要介紹了Redis實(shí)現(xiàn)Session持久化的示例代碼,感興趣的可以了解一下
    2023-09-09
  • redis列表類(lèi)型_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    redis列表類(lèi)型_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了redis列表類(lèi)型的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Redis設(shè)置Hash數(shù)據(jù)類(lèi)型的過(guò)期時(shí)間

    Redis設(shè)置Hash數(shù)據(jù)類(lèi)型的過(guò)期時(shí)間

    在Redis中,我們可以使用Hash數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)一組鍵值對(duì),而有時(shí)候,我們可能需要設(shè)置這些鍵值對(duì)的過(guò)期時(shí)間,本文主要介紹了Redis設(shè)置Hash數(shù)據(jù)類(lèi)型的過(guò)期時(shí)間,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

三门峡市| 专栏| 涞源县| 宜宾县| 阿尔山市| 龙江县| 枣庄市| 清丰县| 汝南县| 娄底市| 枞阳县| 宁波市| 弋阳县| 舒兰市| 望江县| 岢岚县| 册亨县| 莲花县| 大同县| 安顺市| 开化县| 尼玛县| 含山县| 灵武市| 西安市| 太和县| 察隅县| 扶余县| 龙里县| 兰西县| 广汉市| 棋牌| 海南省| 中阳县| 武穴市| 抚顺县| 夹江县| 定州市| 抚远县| 松滋市| 浦县|