標籤:redis string 字串 nosql 辛星
字串類型是Redis中最為基礎的資料存放區類型,它在Redis中是二進位安全的,這就意味著該類型可以接受任何格式的資料,比像資料或者json對象等資訊,在Redis中字串類型的value最多可以容納的資料長度為512M。
我們常用的命令如下:
(1)append key value 如果該key已經存在,那麼append命令會將參數value的值追加到已經存在的value的末尾,如果該key不存在,那麼該命令會建立一個新的Null 字元串,並且把value追加到其末尾。
(2)decr key 將指定的key對應的value原子性的遞減1.如果該key不存在,那麼其初始值為0,在decr之後其值變成-1,。如果value的值不能轉換為整型值,比如hello,該操作將執行失敗並且返回錯誤資訊。注意,該操作的取值範圍是64位有符號整型。
(3)incr key 將指定的key對應的value原子性的遞增1.如果該key不存在,那麼其初始值為0,在incr之後其值變成1,如果vlaue的值不能轉換為整型值,比如hello,那麼該操作會執行失敗並且返回錯誤資訊。注意,該操作的取值範圍是64位有符號整型。
(4)decrby key decrement 將儲存在key上的值減去由decrement指定的值,如果該key不存在,那麼在進行操作前會將其設定為0,如果與key相關聯的值具有錯誤的資料類型或者包含一個不能轉換為整數的字串時,該操作將會出現錯誤。該操作只針對64位有符號數。
(5)get key 該操作擷取儲存在key上的值,如果key並不存在,那麼將會返回nil。如果儲存在key上的值的資料類型並非string,那麼將會出現錯誤。因為get僅僅處理string類型的值。
(6)getbit key offset 它返回儲存在key上的字串在offset位移處的所具有的位置,如果指定的位移值超出了字串的長度,後續字串被視作由0填充的一片連續空間。如果指定的key不存在,那麼將被視為一個空串,在這種情況下,位移值會超出範圍並且可以看做是由0填充的一片連續空間。
(7)getrange key start end 它的時間複雜度為O(N),這裡的N為需要返回的字串的長度。時間複雜度由最終返回的長度決定,因為從已經存在的字串中建立一個子串代價很低,可以認為對於較小的字串而言時間複雜度為O(1)。需要注意的是:該命令在Redis2.0版本之前,被叫做substr。該命令返回在key上的字串的特定子串,子串的範圍由start和end兩個位移值指定,並且均包含端點。在該命令中可以指定負的位移值,此時位移值從字串尾部開始計算。因此,-1意味著最後一個字元,-2意味著倒數第二個字元。如果指定的位移值超出了字串固有的長度,則命令將會限定結果的範圍為字串的真實長度。
(8)getset key value 它是原子性的將key上儲存的值設定為value,並且返回原有的值。如果key存在但是所儲存的值並不是字串類型,那麼將會返回錯誤。
(9)incrby key increment 它對儲存在key上的值加上increment指定的值,如果該key不存在,在執行操作之前會現將其設定為0,然後再執行操作。如果儲存在該key上的值具有錯誤的資料類型或者包含一個不能轉換為整型的字串值,那麼將會返回一個錯誤,該操作只能針對64位有符號整數。
(10)mget key1 key2 .... 該操作返回儲存在指定keys上面的值。對於每一個其值的資料類型不是字串類型或者不存在的key,返回值將會成為nil。因此該操作並不會出現失敗的情況。
(11)mset key1 value1 key2 value2 ..... 該操作對指定的keys設定相應的值。與set命令一樣,mset將會使用新值替代原有的值,mset操作是原子性的,因此所有指定的keys將會在一次操作過程中設定完成。返回值總是OK,因為該操作不會失敗。
(12)msetnx key1 value1 key2 value2 .... 它是將給定的keys設定為相應的值,如果指定的keys中任何一個已經存在,那麼該操作將不會被執行。因此,msetnx可以用來對唯一的邏輯對象中的表示不同欄位的keys設定其值,一遍能夠確保這些欄位要麼全部被設定成功要麼均不會設定。msetnx操作是原子性的,因此所有的keys將會在一次操作過程中被設定。如果所有的keys值均被設定,那麼返回值為1.如果沒有key被設定其值,那麼返回值為0.
(13)set key value 它是對指定的key設定一個字串值,如果該key已經具有值,那麼該值將會重寫而不管它的資料類型。返回值總是OK,因為set操作不會失敗。
(14)setbit key offset value 它設定或者清除儲存在key上的字串在指定位移處的位置。命令中的value可以指定為0或者1,根據value的不同,位置可以被設定或者被清除。當該key不存在時,將會建立一個新的字串的值。字串的長度可以增長一遍能夠包含offset位移處的值。命令中的offset的值需要大於或者等於0,但是需要小於232。這會將位元影像的大小限定在512MB以內。當儲存在該key上的字串被擴充時,增加的位將會被設定為0.需要注意的是,當設定最後一個可能的位,位移值等於231,並且儲存在該key上的字串還沒包含字串值或者包含長度較小的字串值時,Redis需要重新分配中間記憶體,這可能會阻塞伺服器一段時間。一旦第一次分配空間分配完成後,對相同key後續的setbit調用將不再有空間分配的開銷。
(15)setex key seconds value 該操作設定key上儲存的值為value,並且該key在給定的seconds秒後自動逾時。該命令等價於set mykey value expire mykey seconds。其中setex操作是原子性的,並且可以使用位於multi/exec塊中的上述兩條命令來取代。該命令提供了對指定操作序列中的一種替代方式,該操作在Redis用作緩衝時非常普遍。
(16)setnx key value 如果指定的key不存在,那麼將其設定為一個字串。在這種情況下,該命令等同於set。當在key上已經儲存有值時,將不進行任何操作。setnx中可以看做是set if not exists的縮寫。
(17)setrange key offset value 它是儲存在key上的字串被重寫的部分從指定的offset位置開始,長度與value所具有的長度相同。如果offset大於當前字串的長度,字串會使用0來補充以便適應指定的offset。如果指定的key不存在,那麼儲存在其上的值會被認為是空格,因此該命令將確保該key會持有一個足夠打的字串以便能夠設定其在offset位移處的值。不過需要注意的是,我們可以設定的最大位移值為229-1,因為Redis字串的大小被限定在512MB以內。
(18)strlen key 表示返回儲存在key上的字串的長度。如果在該key上儲存的值不是字串類型,那麼將返回一個錯誤。如果該key不存在,那麼返回值為0.
辛星淺析Redis中的字串類型