日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

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

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

認識Redis字符串

Redis 使用標準 C 語言編寫,但在存儲字符時,Redis 并未使用 C 語言的字符類型,而是自定義了一個屬于特殊結構 SDS(Simple Dynamic  String)即簡單動態(tài)字符串),這是一個可以修改的內部結構,非常類似于 Java 的 ArrayList。

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

SDS 的結構定義如下:

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

從上述結構體可以看出,Redis string 將字符串存儲到字符類型的
buf[]中,并使用
len、
free
buf[]數組的長度和未使用的字符數進行描述。

下圖展示了 SDS 字符串的結構示意圖:



圖1

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

在 C語言中,字符串類型的結尾以空字符串 ‘\0’來標識的。但在某些情況下,字符串可能會包含具有實際意義的“空字符”,此時 C語言就無法正確的存取這個字符了,而 Redis 通過 len 來標識字符串的總長度,從而保證了數據的二進制安全特性。

2) 分配冗余空間

string 采用了預先分配冗余空間的方式來減少內存的頻繁分配,如下圖所示:



圖2

如圖 2 所示,Redis 每次給 string 分配的空間都要大于字符串實際占用的空間,這樣就在一定程度上提升了 Redis string 存儲的效率,比如當字符串長度變大時,無需再重新申請內存空間。

3) string自動擴容

當字符串所占空間小于 1MB 時,Redis 對字符串存儲空間的擴容是以成倍的方式增加的;而當所占空間超過 1MB 時,每次擴容只增加 1MB。Redis 字符串允許的最大值字節(jié)數是 512 MB。

Redis字符串命令

1) 命令格式

Redis 提供了操作字符串的命令,通過學習這些命令我們可以掌握如何使用它們,其語法格式如下:

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

在練習命令的過程中,大家要善于利用 Redis 客戶端給出的自動語法提示,比如
SET命令的格式如下:

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

其中
[]內代表可選參數,其含義如下所示:

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


SET命令演示:在 key 不存在的情況下設置過期時間為 60s:

#key的過期時間為60s,過期后自動刪除
redis 127.0.0.1:6379> SET www.biancheng.net "hello編程幫" EX 60 NX
OK
# 查詢 key 對應的值
redis 127.0.0.1:6379> GET www.biancheng.net
"hello編程幫"

2) 常用命令

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

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

簡單命令演示

下面對常用命令做簡單演示:

1) GETRANGE命令

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

redis 127.0.0.1:6379> GETRANGE KEY_NAME start end

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

示例如下:

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

2) GETSET命令

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

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

注意:num 之前存儲的值為“6”,所以結果返回“6”。

3) SETEX命令

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

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

4) MSETNX命令

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

#返回0,說明命令執(zhí)行失敗
127.0.0.1:6379> MSETNX www.biancheng.net hello title world
(integer) 0
#刪除重復的鍵
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 之前已經存在,所以第一次執(zhí)行失敗,當刪除存在的后,命令就會執(zhí)行成功。

5) SETRANGE命令

該命令使用指定的字符在給定的范圍內覆蓋 key 對應的 value ,其語法格式如下:

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"

在線練習工具:https://try.redis.io/

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


當前文章:Redisstring字符串
分享地址:http://www.dlmjj.cn/article/ccssghi.html