redis相對於其他的得nosql資料庫的一大優勢就是有比較豐富的資料型別。不僅僅是簡單key-value的儲存形式。
redis的常用資料型別有:string,lists,sets,sorted sets,hashes。
redis的基本資料型別,如果只是使用這種型別,就相當於把redis用成了乙個可持久化的memcached。常用set get來設定和獲取值。
雖然是string,但是同樣可以對值進行原子操作。也可以通過mset,mget來進行批量操作。最長的儲存長度為512m。
(2)
命令:decr key
時間複雜度:o(1)
命令描述:將指定key的value原子性的遞減1。如果該key不存在,其初始值為0,在decr之後其值為-1。如果value的值不能轉換為整型值,如hello,該操作將執行失敗並返 回相應的錯誤資訊。注意:該操作的取值範圍是64位有符號整型。
返回值:遞減後的value值。
(3)
命令:incr key
時間複雜度:o(1)
命令描述:將指定key的value原子性的遞增1。如果該key不存在,其初始值為0,在incr之後其值為1。如果value的值不能轉換為整型值,如hello,該操作將執行失敗並返回 相應的錯誤資訊。注意:該操作的取值範圍是64位 有符號整型。
返回值:遞增後的value值。
(4)
命令:decrby key decrement
時間複雜度:o(1)
命令描述:將指定key的value原子性的減少decrement。如果該key不存在,其初始值為0,在decrby之後其值為-decrement。如果value的值不能轉換為整型值,如hello,該操作將執行失敗並返回相應的錯誤資訊。注意:該操作的取值範圍是64位有符號整型。
返回值:減少後的value值。
(5)命令:incrby key increment
時間複雜度:o(1)
命令描述:將指定key的value原子性的增加increment。如果該key不存在,其初始值為0,在incrby之後其值為increment。如果value的值不能轉換為整型值,如hello,該操作將執行失敗並返回相應的錯誤資訊。注意:該操作的取值範圍是64位有符號整型。
返回值:增加後的value值。
(6)
命令:get key
時間複雜度:o(1)
命令描述:獲取指定key的value。如果與該key關聯的value不是string型別,redis將返回錯誤資訊,因為get命令只能用於獲取string value。
返回值:與該key相關的value,如果該key不存在,返回nil。
(7)
命令:set key value
時間複雜度:o(1)
命令描述:設定該key持有指定的字串value,如果該key已經存在,則覆蓋其原有值。
返回值:總是返回」ok」。
(8)
命令:getset key value
時間複雜度:o(1)
命令描述:原子性的設定該key為指定的value,同時返回該key的原有值。和get命令一樣,該命令也只能處理string value,否則redis將給出相關的錯誤資訊。
返回值:返回該key的原有值,如果該key之前並不存在,則返回nil。
(9)
命令:strlen key
時間複雜度:o(1)
命令描述:返回指定key的字元值長度,如果value不是string型別,redis將執行失敗並給出相關的錯誤資訊。
返回值:返回指定key的value字元長度,如果該key不存在,返回0。
(10)
命令:setex key seconds value
時間複雜度:o(1)
命令描述:原子性完成兩個操作,一是設定該key的值為指定字串,同時設定該key在redis伺服器中的存活時間(秒數)。該命令主要應用於redis被當做cache伺服器使用時。
返回值:
(11)
命令:setnx key value
時間複雜度:o(1)
命令描述:如果指定的key不存在,則設定該key持有指定字串value,此時其效果等價於set命令。相反,如果該key已經存在,該命令將不做任何操作並返回。
返回值:1表示設定成功,否則0。
(12)
命令:setrange key offset value
時間複雜度:o(1)
命令描述:替換指定key的部分字串值。從offset開始,替換的長度為該命令第三個引數value的字串長度,其中如果offset的值大於該key的原有值value的字串長度, redis將會在value的後面補齊(offset - strlen(value))數量的0x00,之後再追加新值。如果該鍵不存在,該命令會將其原值的長度假設為0,並在其後添補offset個 0x00後再追加新值。鑑於字串value的最大長度為512m,因此offset的最大值為536870911。最後需要注意的是,如果該命令在執行時致使指定key的原有值長度 增加,這將會導致redis重新分配足夠的記憶體以容納替換後的全部字串,因此就會帶來一定的效能折損。 offset是從1開始。
返回值:修改後的字串value長度。
(13)
命令:getrange key start end
時間複雜度:o(1)
命令描述:如果擷取的字串長度很短,我們可以該命令的時間複雜度視為o(1),否則就是o(n),這裡n表示擷取的子字串長度。該命令在擷取子字串時,將以閉區間的方 式同時包含start(0表示第乙個字元)和end所在的字元,如果end值超過value的字元長度,該命令將只是擷取從start開始之後所有的字元資料。
返回值:子字串
(14)
命令:setbit key offset value
時間複雜度:o(1)
命令描述:設定在指定offset上bit的值,該值只能為1或0,在設定後該命令返回該offset上原有的bit值。如果指定key不存在,該命令將建立乙個新值,並在指定的offset上設 定引數中的bit值。如果offset大於value的字元長度,redis將拉長value值並在指定offset上設定引數中的bit值,中間新增的bit值為0。最後需要說明的是offset值 必須大於0。
返回值:在指定offset上的bit原有值。
(15)
命令:getbit key offset
時間複雜度:o(1)
命令描述:返回在指定offset上bit的值,0或1。如果offset超過string value的長度,該命令將返回0,所以對於空字串始終返回0。
返回值:在指定offset上的bit值。
(16)
命令:mget key [key …]
時間複雜度:o(n)
命令描述:n表示獲取key的數量。返回所有指定keys的values,如果其中某個key不存在,或者其值不為string型別,該key的value將返回nil。
返回值:返回一組指定keys的values的列表
(17)
命令:mset key value [key value …]
時間複雜度:o(n)
命令描述:n表示指定key的數量。該命令原子性的完成引數中所有key/value的設定操作,其具體行為可以看成是多次迭代執行set命令。
返回值:該命令不會失敗,始終返回ok。
(18)
命令:msetnx key value [key value …]
時間複雜度:o(n)
命令描述:n表示指定key的數量。該命令原子性的完成引數中所有key/value的設定操作,其具體行為可以看成是多次迭代執行setnx命令。然而這裡需要明確說明的是,如果在這一批keys中有任意乙個key已經存在了,那麼該操作將全部回滾,即所有的修改都不會生效。
返回值:1表示所有keys都設定成功,0則表示沒有任何key被修改。
簡單歸納:命令基本可以分為以下幾個操作方便記憶。
1.set get mset mget 設定和獲取值,單個與批量。
2.incr decr incrby decrby 原子加減操作,帶有by的可以指定原子加減的數值。
3.setnx msetnx 單個和批量的原子設定值操作。
4.getset 原子獲取設定
6.getbit setbit 二進位制偏移量的方式獲取和設定值
7.setex 原子設定值並且設定有效時間。
上述命令中,如果涉及的的原子操作,一看到原子就可以想到事務的乙個特點就是原子性。所以,原子性操作的命令可以用於併發的時候使用。
**:
Redis常用資料型別
redis最為常用的資料型別主要有以下五種 string hash list set sorted set 下面我們先來逐一的分析下這五種資料型別的使用和內部實現方式 string 常用命令 set,get,decr,incr,mget 等。應用場景 string是最常用的一種資料型別,普通的key...
redis常用資料型別
redis 特點 1.所有資料儲存在記憶體中,高速讀寫 2.提供豐富多樣的資料型別 string hash list set sorted set 3.提供了 aof 和 rdb 兩種資料的持久化儲存方式,保證了 redis 重啟後資料不丟失 4.redis 的所有操作都是原子性的,還支援對幾個操作...
redis(二) 資料型別
參考文章 一 redis資料型別 1.1 字串 strings 有人說,如果只使用redis中的字串型別,且不使用redis的持久化功能,那麼,redis就和memcache非常非常像了。這說明strins型別是乙個很基礎的資料型別,也是任何儲存系統都必須必備的資料型別。字串型別是二進位制安全的。1...