日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redisstring字符串
string(字符串)是 Redis 中最簡(jiǎn)單的數(shù)據(jù)類型。我們知道,Redis 所有數(shù)據(jù)類型都是以 key 作為鍵,通過(guò)檢索這個(gè) key 就可以獲取相應(yīng)的 value 值。Redis 存在多種數(shù)據(jù)類型,比如字符串、列表、哈希散列等,它們對(duì)應(yīng)的 value 結(jié)構(gòu)各不相同。本節(jié)先講解字符串的相關(guān)知識(shí)。

創(chuàng)新互聯(lián)建站致力于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過(guò)標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。 選擇創(chuàng)新互聯(lián)建站,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

認(rèn)識(shí)Redis字符串

Redis 使用標(biāo)準(zhǔn) C 語(yǔ)言編寫,但在存儲(chǔ)字符時(shí),Redis 并未使用 C 語(yǔ)言的字符類型,而是自定義了一個(gè)屬于特殊結(jié)構(gòu) SDS(Simple Dynamic  String)即簡(jiǎn)單動(dòng)態(tài)字符串),這是一個(gè)可以修改的內(nèi)部結(jié)構(gòu),非常類似于 Java 的 ArrayList。

1) SDS動(dòng)態(tài)字符串

SDS 的結(jié)構(gòu)定義如下:

struct sdshdr{
     //記錄buf數(shù)組中已使用字符的數(shù)量,等于 SDS 保存字符串的長(zhǎng)度
     int len;
     //記錄 buf 數(shù)組中未使用的字符數(shù)量
     int free;
     //字符數(shù)組,用于保存字符串
     char buf[];

從上述結(jié)構(gòu)體可以看出,Redis string 將字符串存儲(chǔ)到字符類型的
buf[]中,并使用
len、
free對(duì)
buf[]數(shù)組的長(zhǎng)度和未使用的字符數(shù)進(jìn)行描述。

下圖展示了 SDS 字符串的結(jié)構(gòu)示意圖:



圖1

上圖 1 存儲(chǔ)了一個(gè)
len為 4 的 “java\0”字符串,并且未使用的字符數(shù)
free為 0。你可能注意到 buf 數(shù)組存儲(chǔ)的字符串仍然以 C語(yǔ)言字符格式的“\0”結(jié)尾的,這樣做的目的是為了能夠重用 C語(yǔ)言庫(kù) 中的部分函數(shù)。

在 C語(yǔ)言中,字符串類型的結(jié)尾以空字符串 ‘\0’來(lái)標(biāo)識(shí)的。但在某些情況下,字符串可能會(huì)包含具有實(shí)際意義的“空字符”,此時(shí) C語(yǔ)言就無(wú)法正確的存取這個(gè)字符了,而 Redis 通過(guò) len 來(lái)標(biāo)識(shí)字符串的總長(zhǎng)度,從而保證了數(shù)據(jù)的二進(jìn)制安全特性。

2) 分配冗余空間

string 采用了預(yù)先分配冗余空間的方式來(lái)減少內(nèi)存的頻繁分配,如下圖所示:



圖2

如圖 2 所示,Redis 每次給 string 分配的空間都要大于字符串實(shí)際占用的空間,這樣就在一定程度上提升了 Redis string 存儲(chǔ)的效率,比如當(dāng)字符串長(zhǎng)度變大時(shí),無(wú)需再重新申請(qǐng)內(nèi)存空間。

3) string自動(dòng)擴(kuò)容

當(dāng)字符串所占空間小于 1MB 時(shí),Redis 對(duì)字符串存儲(chǔ)空間的擴(kuò)容是以成倍的方式增加的;而當(dāng)所占空間超過(guò) 1MB 時(shí),每次擴(kuò)容只增加 1MB。Redis 字符串允許的最大值字節(jié)數(shù)是 512 MB。

Redis字符串命令

1) 命令格式

Redis 提供了操作字符串的命令,通過(guò)學(xué)習(xí)這些命令我們可以掌握如何使用它們,其語(yǔ)法格式如下:

redis 127.0.0.1:6379> COMMAND KEY_NAME
  • COMMAND:表示字符串的命令;
  • KEY_NAME:表示 key(鍵)的名稱。

在練習(xí)命令的過(guò)程中,大家要善于利用 Redis 客戶端給出的自動(dòng)語(yǔ)法提示,比如
SET命令的格式如下:

127.0.0.1:6379> SET key value [EX seconds|PX milliseconds] [NX|XX]

其中
[]內(nèi)代表可選參數(shù),其含義如下所示:

  • EX seconds:設(shè)置指定的過(guò)期時(shí)間,以秒為單位;
  • PX milliseconds:設(shè)置指定的過(guò)期時(shí)間,以毫秒為單位;
  • NX:先判斷 key 是否存在,如果 key 不存在,則設(shè)置 key 與 value;
  • XX:先判斷 key 是否存在,如果 key 存在,則重新設(shè)置 value。


SET命令演示:在 key 不存在的情況下設(shè)置過(guò)期時(shí)間為 60s:

#key的過(guò)期時(shí)間為60s,過(guò)期后自動(dòng)刪除
redis 127.0.0.1:6379> SET www.biancheng.net "hello編程幫" EX 60 NX
OK
# 查詢 key 對(duì)應(yīng)的值
redis 127.0.0.1:6379> GET www.biancheng.net
"hello編程幫"

2) 常用命令

Redis字符串命令
命令 說(shuō)明
SET key value 用于設(shè)定指定鍵的值。
GET key 用于檢索指定鍵的值。
GETRANGE key start end 返回 key 中字符串值的子字符。
GETSET key value 將給定 key 的值設(shè)置為 value,并返回 key 的舊值。
GETBIT key offset 對(duì) key 所存儲(chǔ)的字符串值,獲取其指定偏移量上的位(bit)。
MGET key1 [key2..] 批量獲取一個(gè)或多個(gè) key 所存儲(chǔ)的值,減少網(wǎng)絡(luò)耗時(shí)開銷。
SETBIT key offset value 對(duì) key 所儲(chǔ)存的字符串值,設(shè)置或清除指定偏移量上的位(bit)。
SETEX key seconds value 將值 value 存儲(chǔ)到 key中 ,并將 key 的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位)。
SETNX key value 當(dāng) key 不存在時(shí)設(shè)置 key 的值。
SETRANGE key offset value 從偏移量 offset 開始,使用指定的 value 覆蓋的 key 所存儲(chǔ)的部分字符串值。
STRLEN key 返回 key 所儲(chǔ)存的字符串值的長(zhǎng)度。
MSET key value [key value ...] 該命令允許同時(shí)設(shè)置多個(gè)鍵值對(duì)。
MSETNX key value [key value ...] 當(dāng)指定的 key 都不存在時(shí),用于設(shè)置多個(gè)鍵值對(duì)。
PSETEX key milliseconds value 此命令用于設(shè)置 key 的值和有過(guò)期時(shí)間(以毫秒為單位)。
INCR key 將 key 所存儲(chǔ)的整數(shù)值加 1。
INCRBY key increment 將 key 所儲(chǔ)存的值加上給定的遞增值(increment)。
INCRBYFLOAT key increment 將 key 所儲(chǔ)存的值加上指定的浮點(diǎn)遞增值(increment)。
DECR key 將 key 所存儲(chǔ)的整數(shù)值減 1。
DECRBY key decrement 將 key 所儲(chǔ)存的值減去給定的遞減值(decrement)。
APPEND key value 該命令將 value 追加到 key 所存儲(chǔ)值的末尾。

Redis string 的
SET/GET命令只能一次設(shè)置/查詢一個(gè)鍵值對(duì),這樣雖然簡(jiǎn)單,但是效率不高。為了提高命令的執(zhí)行效率,Redis 提供了可以批量操作多個(gè)字符串的讀寫命令 MSET/MGET(“M”代表“Many”),它們?cè)试S你一次性設(shè)置或查詢多個(gè)鍵值對(duì),這樣就有效地減少了網(wǎng)絡(luò)耗時(shí)。

簡(jiǎn)單命令演示

下面對(duì)常用命令做簡(jiǎn)單演示:

1) GETRANGE命令

GETRANGE 命令用于截取一定長(zhǎng)度的  value,并返回截取后的新值。語(yǔ)法格式如下:

redis 127.0.0.1:6379> GETRANGE KEY_NAME start end

注意,字符串的截取范圍由 start 和 end 兩個(gè)偏移量決定(包括 start 和 end 在內(nèi)的閉區(qū)間)

示例如下:

127.0.0.1:6379> SET website www.biancheng.net
OK
#索引值
127.0.0.1:6379> GETRANGE website 0 4
"www.b"
#使用負(fù)數(shù)索引
127.0.0.1:6379> GETRANGE website 0 -1
"www.biancheng.net"
127.0.0.1:6379>

2) GETSET命令

GETSET 命令用于重新設(shè)置 value 值,并返回之前舊 value。示例如下:

127.0.0.1:6379> GETSET num first
"6"
127.0.0.1:6379> GETSET num second
"first"
#查看長(zhǎng)度值
127.0.0.1:6379> strlen num
(integer) 6

注意:num 之前存儲(chǔ)的值為“6”,所以結(jié)果返回“6”。

3) SETEX命令

將值 value 存儲(chǔ)到 key 中 ,并將 key 的過(guò)期時(shí)間設(shè)為 seconds (以秒為單位)。示例如下:

#設(shè)置過(guò)期時(shí)間為60s
127.0.0.1:6379> SETEX www.biancheng.net 60 hello
OK
#查看過(guò)期時(shí)間
127.0.0.1:6379> ttl www.biancheng.net
(integer) 5

4) MSETNX命令

該命令了類似于 MSET 命令,但是它僅當(dāng)指定的 key 不存在時(shí)才能夠執(zhí)行成功,用于同時(shí)設(shè)置多個(gè)鍵值對(duì)。示例如下:

#返回0,說(shuō)明命令執(zhí)行失敗
127.0.0.1:6379> MSETNX www.biancheng.net hello title world
(integer) 0
#刪除重復(fù)的鍵
127.0.0.1:6379> del www.biancheng.net
(integer) 1
#重新執(zhí)行
127.0.0.1:6379> MSETNX www.biancheng.net hello title world
(integer) 1

由于 key 之前已經(jīng)存在,所以第一次執(zhí)行失敗,當(dāng)刪除存在的后,命令就會(huì)執(zhí)行成功。

5) SETRANGE命令

該命令使用指定的字符在給定的范圍內(nèi)覆蓋 key 對(duì)應(yīng)的 value ,其語(yǔ)法格式如下:

redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE
  • KEY_NAME:指 key 的名字;
  • OFFSET:指初始偏移量;
  • VALUE:指要替換成的字符串。 

示例如下: 

127.0.0.1:6379> SET word "hello world"
OK
127.0.0.1:6379> SETRANGE word 6 www.biancheng.net
(integer) 23
127.0.0.1:6379> GET word
"hello www.biancheng.net"

在線練習(xí)工具:https://try.redis.io/

查看更多命令:https://redis.io/commands


標(biāo)題名稱:Redisstring字符串
轉(zhuǎn)載注明:http://www.5511xx.com/article/ccssghi.html