Redis学习笔记【04】 - 字符串
一、簡介
字符串類型是redis最基礎的數據結構。首先鍵都是字符串類型,而其它幾種數據結構類型都是在字符串類型基礎上構建的,所以字符串類型能為其他四種數據結構的學習奠定基礎。
字符串類型的值實際可以是字符串(簡單的字符串、復雜的字符串(例如:JSON、XML))、數字(整數、浮點數)、甚至是二進制(圖片、音頻、視頻),但值最大不能超過512MB。
二、命令
1、常用命令
1)設置值
set key value [ex seconds] [px milliseconds] [nx|xx]下面操作設置鍵hello,返回結果為OK則代表設置成功:
127.0.0.1:6379> set hello npsee OKset命令有幾個選項:
- ex seconds:為鍵設置秒級過期時間。
- px milliseconds:為鍵設置毫秒級過期時間。
- nx:鍵必須不存在,才可以設置成功,用于更新。
- xx:與nx相反,鍵必須存在,才可以設置成功,用于更新。
除了set選項,redis還提供了setex和setnx兩個命令,其作用和ex和nx選項是一樣的:
setex key seconds value setnx key value例:
2)獲取值
get key如果要獲取的鍵不存在,則返回nil(空)。
3)批量設置值
mset key value [key value ...]如:
127.0.0.1:6379> mset a 1 b 2 c 3 d 4 OK4)批量獲取值
mget key [key ...]如:
127.0.0.1:6379> mget a b c d e 1) "1" 2) "2" 3) "3" 4) "4" 5) (nil)如果有些鍵不存在,那么它的值為nil,結果是按照傳入鍵的順序返回
5)計數
incr keyincr命令用于對值做自增操作,返回的結果分為有一種情況:
- 值不是整數,返回錯誤。
- 值是整數,返回自增后的結果。
- 鍵不存在,按照值為0自增,返回結果為1。
如:
127.0.0.1:6379> exists key (integer) 0 127.0.0.1:6379> incr key (integer) 1 127.0.0.1:6379> incr key (integer) 2 127.0.0.1:6379> set hello nosee OK 127.0.0.1:6379> incr hello (error) ERR value is not an integer or out of range除了incr命令,redis提供了decr(自減)、incrby(自增指定數字)、decrby(自減指定數字)、incrbyfloat(自增浮點數)。
2、不常用命令
1)追加值
append key valueappend可以向字符串尾部追加值,如:
127.0.0.1:6379> get hello "nosee" 127.0.0.1:6379> append hello 123 (integer) 8 127.0.0.1:6379> get hello "nosee123"2)字符串長度
strlen key如:
127.0.0.1:6379> get hello "nosee123" 127.0.0.1:6379> strlen hello (integer) 8下面操作返回結果6,因為每個中文占用3個字節:
127.0.0.1:6379> set hello '不見' OK 127.0.0.1:6379> strlen hello (integer) 63)設置并返回原值
getset key valuegetset和set一樣會設置值,但不同的是,它同時會返回鍵原來的值,如:
127.0.0.1:6379> getset test no (nil) 127.0.0.1:6379> getset test see "no"4)設置指定位置的字符
setrange key offeset value下面操作將值由pest變成best:
127.0.0.1:6379> set hello pest OK 127.0.0.1:6379> setrange hello 0 b (integer) 4 127.0.0.1:6379> get hello "best"5)獲取部份字符串
getrange key start end偏移量從0開始計算,如:
127.0.0.1:6379> get hello "best" 127.0.0.1:6379> getrange hello 1 2 "es"3、字符串類型命令時間復雜度
| set key value | O(1) |
| get key | O(1) |
| del key [key …] | O(k),k是鍵的個數 |
| mset key value [key value …] | O(k),k是鍵的個數 |
| mget key [key …] | O(k),k是鍵的個數 |
| incr key | O(1) |
| decr key | O(1) |
| incrby key increment | O(1) |
| decrby key decrement | O(1) |
| incrbyfloat key increment | O(1) |
| append key value | O(1) |
| strlen key | O(1) |
| setrange key offset value | O(1) |
| getrange key start end | O(n),n是字符串長度,由于獲取字符串非???#xff0c;所以如果字符串不是很長,可以視同為O(1) |
三、內部編碼
字符串類型的內部編碼有三種類型:
- int:8個字節的長整形。
- embstr:小于等于39個字節的字符串。
- raw:大于39個字節的字符串。
redis會根據當前值的類型和決定使用哪種內部編碼實現。
127.0.0.1:6379> set hello 4562 OK 127.0.0.1:6379> object encoding hello "int" 127.0.0.1:6379> set hello 'hi, noseee!' OK 127.0.0.1:6379> object encoding hello "embstr" 127.0.0.1:6379> set hello 'hi, noseee! my name is calvin chan. what is you name?' OK 127.0.0.1:6379> object encoding hello "raw" 127.0.0.1:6379> strlen hello (integer) 53參考:
《Redis開發與運維》 付磊 & 張益軍
總結
以上是生活随笔為你收集整理的Redis学习笔记【04】 - 字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 穷人的思维
- 下一篇: 飞机座位数根据订单数自减