搜尋
首頁資料庫RedisRedis中String資料類型實例分析

概述:

字串類型是Redis中最為基礎的資料儲存類型,它在Redis中是二進位安全的,這便意味著該類型可以接受任何格式的數據,如JPEG影像數據或Json對象描述資訊等。 Redis中字串類型的值的最大容量為 512MB。

相關指令清單:

指令原型 時間複雜度 #指令描述 傳回值
APPEND #O(1)  如果該Key已經存在,APPEND指令將參數Value的資料追加到已存在Value的結尾。如果該Key不存在,APPEND指令將會建立一個新的Key/Value。 追加後Value的長度。
DECR O(1)  

將指定Key的Value原子性的遞減1。如果該Key不存在,其初始值為0,在decr之後其值為-1。如果Value的值不是整數類型,例如Hello,該操作將失敗

並傳回對應的錯誤訊息。注意:此操作的取值範圍為64位元有符號整數。

遞減後的Value值。
INCR O(1)  

將指定Key的Value原子性的遞增1。如果該Key不存在,其初始值為0,在incr之後其值為1。如果Value的值無法轉換成整數值,比如說Hello這個字串,那麼該操作將會失敗

並傳回對應的錯誤訊息。注意:此操作的取值範圍為64位元有符號整數。 

遞增後的Value值。 
DECRBY  #O(1)

將指定Key的Value原子性的減少decrement。執行decrby後,如果該Key不存在,則其初始值為0,之後其值變為-decrement。如果Value的值無法轉換為整數值,

如Hello,該動作將執行失敗並傳回對應的錯誤訊息。注意:此操作的取值範圍為64位元有符號整數。 

減少後的Value值。
INCRBY O(1) 

將指定Key的Value原子性的增加increment。如果該Key不存在,其初始值為0,在incrby之後其值為increment。如果Value的值不能轉換為整數值,如Hello,

該操作將執行失敗並傳回對應的錯誤訊息。注意:此操作的取值範圍為64位元有符號整數。 

增加後的Value值。
GET O(1) 取得指定Key的Value。如果與該Key關聯的Value不是string類型,Redis將傳回錯誤訊息,因為GET指令只能用於取得string Value。  與該Key相關的Value,如果該Key不存在,回傳nil。
SET O(1) 設定該Key持有指定的字串Value,如果該Key已經存在,則覆蓋其原有值。 總是回傳"OK"。
GETSET O(1) 原子性的設定該Key為指定的Value,同時傳回該Key的原有值。和GET指令一樣,這個指令也只能處理string Value,否則Redis會給予相關的錯誤訊息。 傳回該Key的原有值,如果該Key之前不存在,則傳回nil。
STRLEN O(1) 傳回指定Key的字元值長度,如果Value不是string類型,Redis將執行失敗並給出相關的錯誤訊息。 傳回指定Key的Value字元長度,如果該Key不存在,則回傳0。
SETEX O(1) 原子性完成兩個操作,一是設定該Key的值為指定字串,同時設定該Key在Redis伺服器中的存活時間(秒數)。此指令主要應用於Redis被當做Cache伺服器使用時。  
SETNX #O(1) 如果指定的Key不存在,則設定該Key持有指定字串Value,此時其效果等價於SET指令。相反,如果該Key已經存在,該命令將不做任何操作並返回。 1表示設定成功,否則0。
SETRANGE   O(1)

取代指定Key的部分字串值。從offset開始,替換的長度為此指令第三個參數value的字串長度,其中如果offset的值大於該Key的原有值Value的字串長度,

Redis將會在Value的後面補齊(offset - strlen(value))數量的0x00,之後再追加新值。如果鍵不存在,則指令將假定其原值長度為0,並在其後加入offset個字元

0x00後再追加新值。鑑於字串Value的最大長度為512M,因此offset的最大值為536870911。最後要注意的是,如果該指令在執行時致使指定Key的原有值

當長度增加時,Redis會重新分配足夠記憶體以容納替換後的所有字串,因此會在一定程度上影響性能。 

修改後的字串Value長度。
GETRANGE O(1)

如果被截取的字串長度很短,我們可以該指令的時間複雜度視為O(1),否則就是O(N),這裡N表示截取的子字串長度。指令在截取子字串時,將以閉區間的方

式同時包含start(0表示第一個字元)和end所在的字符,如果end值超過Value的字元長度,該指令將只是截取從start開始之後所有的字元資料。

子字串 
SETBIT O(1)

設定在指定Offset上BIT的值,該值只能為1或0,設定後該指令傳回該Offset上原有的BIT值。如果指定Key不存在,則指令將建立一個新值,並在指定

的Offset上設定參數中的BIT值。如果Offset大於Value的字元長度,Redis會拉長Value值並在指定Offset上設定參數中的BIT值,中間新增的BIT值為0。最後需要

說明的是Offset值必須大於0。 

在指定Offset上的BIT原有值。
GETBIT O(1) 傳回指定Offset上BIT的值,0或1。如果Offset超過string value的長度,則該指令將傳回0,所以對於空字串始終傳回0。 在指定Offset上的BIT值。 
MGET O(N) N表示取得Key的數量。傳回所有指定Keys的Values,如果其中某個Key不存在,或者其值不為string類型,則該Key的Value會傳回nil。 傳回一組指定Keys的Values的清單。
MSET O(N) N表示指定Key的數量。此指令原子性的完成參數中所有key/value的設定操作,其具體行為可視為多次迭代執行SET指令。  此指令不會失敗,總是回傳OK。 
MSETNX O(N)

N表示指定Key的數量。此指令原子性的完成參數中所有key/value的設定操作,其具體行為可視為多次迭代執行SETNX指令。然而這裡需要明確說明的是,

如果在這一批Keys中有任何一個Key已經存在了,那麼該操作將全部回滾,即所有的修改都不會生效。


String(字串)

append key value 在原有的value上新增值,如果key原先不存在就新建一個key和value不是追加

substr key start len 截取key,從start開始,截取len的長度

strlen key 取得key的長度

incr key 自增1

decr key 自減1

incrby key num 增加key ,增加num

decrby key num 減少key,減少num

getrange key start end 截取字元key [start,end] 包頭也包尾

setrange key offset value 取代offset位置的資料改為value (offset是key的索引)

setex key seconds value 設定key的過期時間

若key不存在,則執行setnx指令會將key和value設定進去;但如果key已存在,則setnx指令會失敗,無法再新增value

mset key1 值 key2 value 一次設定多個key、value

mget key1 key2 一次取得多個key的value

msetnx key1 value key2 value 一次設定多個key、 value 如果其中一個key存在則全部建立失敗(原子性)

getset key value 如果不存在取得nil,然後設定值,如果指存在取得先前的值,在設定後面的value(更新的操作)

###############################################
127.0.0.1:6379> set key1 v
OK
127.0.0.1:6379> get key1
"v"
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> append key1 v1
(integer) 3
127.0.0.1:6379> get key1
"vv1"
127.0.0.1:6379> substr key1 0 3
"vv1"
127.0.0.1:6379> strlen key1
(integer) 3
127.0.0.1:6379> append key1 "hello1"
(integer) 9
127.0.0.1:6379> substr key1 1 2
"v1"
127.0.0.1:6379> substr key1 1 1
"v"
127.0.0.1:6379> append key2 "lisi"
(integer) 4
127.0.0.1:6379> get key2
"lisi"
###############################################
127.0.0.1:6379> set views 0
OK
127.0.0.1:6379> get views
"0"
127.0.0.1:6379> incr views
(integer) 1
127.0.0.1:6379> incr views
(integer) 2
127.0.0.1:6379> get views
"2"
127.0.0.1:6379> decr views
(integer) 1
127.0.0.1:6379> decr views
(integer) 0
127.0.0.1:6379> incrby views 10
(integer) 10
127.0.0.1:6379> decrby views 5
(integer) 5
####################################
127.0.0.1:6379> set key1 "hello,world"
OK
127.0.0.1:6379> GETRANGE key1 0 3
"hell"
127.0.0.1:6379> GETRANGE key1 0 -1
"hello,world"
127.0.0.1:6379> SETRANGE key2 3 2
(integer) 7
127.0.0.1:6379> get key2
"abc2efg"
########################################
127.0.0.1:6379> setex key3 30 hello
OK
127.0.0.1:6379> get key3
"hello"
127.0.0.1:6379> ttl key3
(integer) 24
127.0.0.1:6379> SETNX mykey redis
(integer) 1
127.0.0.1:6379> keys *
1) "mykey"
2) "key2"
3) "key1"
127.0.0.1:6379> SETNX mykey "MongoDB"
(integer) 0
127.0.0.1:6379> get mykey
"redis"
####################################
127.0.0.1:6379> mset k1 v1 k2 v2
OK
127.0.0.1:6379> mget k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> MSETNX k1 v1 k3 v3
(integer) 0
# 对象
# 这里的key是一个巧妙的设计 user:{id}:{filed} 
127.0.0.1:6379> msetnx user:1:name "zhangsan" user:1:age 2
(integer) 1
127.0.0.1:6379> mget user:1:name user:1:age
1) "zhangsan"
2) "2"
127.0.0.1:6379> set article:101:views 0
OK
127.0.0.1:6379> incr article:101:views
(integer) 1
127.0.0.1:6379> get article:101:views
"1"
###########################################################
127.0.0.1:6379> getset db redis
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db 10
"redis"

String類似的場景:value除了是我們的字串還可以是我們的數字!

  • 計數器

  • 統計多單位的數量uid:1923:follow 0

  • 粉絲數

  • 物件快取儲存

#

以上是Redis中String資料類型實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
REDIS的角色:探索數據存儲和管理功能REDIS的角色:探索數據存儲和管理功能Apr 22, 2025 am 12:10 AM

Redis在數據存儲和管理中扮演著關鍵角色,通過其多種數據結構和持久化機製成為現代應用的核心。 1)Redis支持字符串、列表、集合、有序集合和哈希表等數據結構,適用於緩存和復雜業務邏輯。 2)通過RDB和AOF兩種持久化方式,Redis確保數據的可靠存儲和快速恢復。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一種NoSQL數據庫,適用於大規模數據的高效存儲和訪問。 1.Redis是開源的內存數據結構存儲系統,支持多種數據結構。 2.它提供極快的讀寫速度,適合緩存、會話管理等。 3.Redis支持持久化,通過RDB和AOF方式確保數據安全。 4.使用示例包括基本的鍵值對操作和高級的集合去重功能。 5.常見錯誤包括連接問題、數據類型不匹配和內存溢出,需注意調試。 6.性能優化建議包括選擇合適的數據結構和設置內存淘汰策略。

REDIS:現實世界的用例和示例REDIS:現實世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在現實世界中的應用包括:1.作為緩存系統加速數據庫查詢,2.存儲Web應用的會話數據,3.實現實時排行榜,4.作為消息隊列簡化消息傳遞。 Redis的多功能性和高性能使其在這些場景中大放異彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脫穎而出是因為其高速、多功能性和豐富的數據結構。 1)Redis支持字符串、列表、集合、散列和有序集合等數據結構。 2)它通過內存存儲數據,支持RDB和AOF持久化。 3)從Redis6.0開始引入多線程處理I/O操作,提升了高並發場景下的性能。

Redis是SQL還是NOSQL數據庫?答案解釋了Redis是SQL還是NOSQL數據庫?答案解釋了Apr 18, 2025 am 12:11 AM

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

REDIS:提高應用程序性能和可擴展性REDIS:提高應用程序性能和可擴展性Apr 17, 2025 am 12:16 AM

Redis通過緩存數據、實現分佈式鎖和數據持久化來提升應用性能和可擴展性。 1)緩存數據:使用Redis緩存頻繁訪問的數據,提高數據訪問速度。 2)分佈式鎖:利用Redis實現分佈式鎖,確保在分佈式環境中操作的安全性。 3)數據持久化:通過RDB和AOF機制保證數據安全性,防止數據丟失。

REDIS:探索其數據模型和結構REDIS:探索其數據模型和結構Apr 16, 2025 am 12:09 AM

Redis的數據模型和結構包括五種主要類型:1.字符串(String):用於存儲文本或二進制數據,支持原子操作。 2.列表(List):有序元素集合,適合隊列和堆棧。 3.集合(Set):無序唯一元素集合,支持集合運算。 4.有序集合(SortedSet):帶分數的唯一元素集合,適用於排行榜。 5.哈希表(Hash):鍵值對集合,適合存儲對象。

REDIS:對其數據庫方法進行分類REDIS:對其數據庫方法進行分類Apr 15, 2025 am 12:06 AM

Redis的數據庫方法包括內存數據庫和鍵值存儲。 1)Redis將數據存儲在內存中,讀寫速度快。 2)它使用鍵值對存儲數據,支持複雜數據結構,如列表、集合、哈希表和有序集合,適用於緩存和NoSQL數據庫。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具