redis原始碼分析(三)redis命令學習總結—string字串
一、描述
- 字串型別是Redis中最為基礎的資料儲存型別,它在Redis中是二進位制安全的,這便意味著該型別可以接受任何格式的資料,如JPEG影象資料或Json物件描述資訊等。
- 在Redis中字串型別的Value最多可以容納的資料長度是512M
二、redis字串命令介紹
1.set 命令:
Redis SET 命令用於設定給定 key 的值。如果 key 已經儲存其他值, SET 就覆寫舊值,且無視型別。
# 對不存在的鍵進行設定
redis 127.0.0.1:6379> SET key "value"
OK
redis 127.0.0.1:6379> GET key
"value"
# 對已存在的鍵進行設定
redis 127.0.0.1:6379> SET key "new-value"
OK
redis 127.0.0.1:6379> GET key
2、get命令
Redis Get 命令用於獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字串型別,返回一個錯誤。
# 對不存在的 key 或字串型別 key 進行 GET
redis> GET db
(nil)
redis> SET db redis
OK
redis> GET db
"redis"
# 對不是字串型別的 key 進行 GET
redis> DEL db
(integer) 1
redis> LPUSH db redis mongodb mysql
(integer) 3
redis> GET db
(error) ERR Operation against a key holding the wrong kind of value
3、Getrange
Redis Getrange 命令用於獲取儲存在指定 key 中字串的子字串。字串的擷取範圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。 用法:
redis 127.0.0.1:6379> GETRANGE KEY_NAME start end
redis 127.0.0.1:6379> SET mykey "This is my test key"
OK
redis 127.0.0.1:6379> GETRANGE mykey 0 3
"This"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"This is my test key
4、Getset
Redis Getset 命令用於設定指定 key 的值,並返回 key 舊的值。 基本語法:
redis 127.0.0.1:6379> GETSET KEY_NAME VALUE
返回值
- 返回給定 key 的舊值。 當 key 沒有舊值時,即 key 不存在時,返回 nil 。
- 當 key 存在但不是字串型別時,返回一個錯誤。
例項
redis 127.0.0.1:6379> GETSET mynewkey "This is my test key"
(nil)
redis 127.0.0.1:6379> GETSET mynewkey "This is my new value to test getset"
"This is my test key"
5、Getbit
Redis Getbit 命令用於對 key 所儲存的字串值,獲取指定偏移量上的位(bit)。
語法:
redis 127.0.0.1:6379> GETBIT KEY_NAME OFFSET
返回值
字串值指定偏移量上的位(bit)。
當偏移量 OFFSET 比字串值的長度大,或者 key 不存在時,返回 0 。
# 對不存在的 key 或者不存在的 offset 進行 GETBIT, 返回 0
redis> EXISTS bit
(integer) 0
redis> GETBIT bit 10086
(integer) 0
# 對已存在的 offset 進行 GETBIT
redis> SETBIT bit 10086 1
(integer) 0
redis> GETBIT bit 10086
(integer) 1
6、Mget命令
Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 裡面,有某個 key 不存在,那麼這個 key 返回特殊值 nil 。
redis 127.0.0.1:6379> MGET KEY1 KEY2 .. KEYN
redis 127.0.0.1:6379> SET key1 "hello"
OK
redis 127.0.0.1:6379> SET key2 "world"
OK
redis 127.0.0.1:6379> MGET key1 key2 someOtherKey
1) "Hello"
2) "World"
3) (nil)
7、Setbit
Redis Setbit 命令用於對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)。
redis Setbit 命令基本語法如下:
redis 127.0.0.1:6379> Setbit KEY_NAME OFFSET
返回值: 指定偏移量原來儲存的位。
例項
redis> SETBIT bit 10086 1
(integer) 0
redis> GETBIT bit 10086
(integer) 1
redis> GETBIT bit 100 # bit 預設被初始化為 0
(integer) 0
8、Setex
Redis Setex 命令為指定的 key 設定值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。
redis Setex 命令基本語法如下:設定成功時返回 OK
redis 127.0.0.1:6379> SETEX KEY_NAME TIMEOUT VALUE
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis
9、Setnx (只有在 key 不存在時設定 key 的值)
Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設定指定的值。
基本語法:設定成功,返回 1 。 設定失敗,返回 0 。
redis 127.0.0.1:6379> SETNX KEY_NAME VALUE
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 設定成功
(integer) 1
redis> SETNX job "code-farmer" # 嘗試覆蓋 job ,失敗
(integer) 0
redis> GET job # 沒有被覆蓋
"programmer"
10、Setrange
Redis Setrange 命令 - 用 value 引數覆寫給定 key 所儲存的字串值,從偏移量 offset 開始 用法:返回被修改後的字串長度。
redis 127.0.0.1:6379> SETRANGE KEY_NAME OFFSET VALUE
示例:
redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"
11、Strlen 命令
Redis Strlen 命令用於獲取指定 key 所儲存的字串值的長度。當 key 儲存的不是字串值時,返回一個錯誤
用法: 返回字串值的長度。 當 key 不存在時,返回 0。
redis 127.0.0.1:6379> STRLEN KEY_NAME
示例:
# 獲取字串的長度
redis> SET mykey "Hello world"
OK
redis> STRLEN mykey
(integer) 11
# 不存在的 key 長度為 0
redis> STRLEN nonexisting
(integer) 0
12、Mset
Redis Mset 命令用於同時設定一個或多個 key-value 對。
redis 127.0.0.1:6379> MSET key1 value1 key2 value2 .. keyN valueN
示例:
redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
redis 127.0.0.1:6379> GET key1
"Hello"
redis 127.0.0.1:6379> GET key2
1) "World"
13、Msetnx
Redis Msetnx 命令 - 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 基本語法:
redis 127.0.0.1:6379> MSETNX key1 value1 key2 value2 .. keyN valueN
當所有 key 都成功設定,返回 1 。 如果所有給定 key 都設定失敗(至少有一個 key 已經存在),那麼返回 0 。
示例:
# 對不存在的 key 進行 MSETNX
redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
(integer) 1
redis> MGET rmdbs nosql key-value-store
1) "MySQL"
2) "MongoDB"
3) "redis"
# MSET 的給定 key 當中有已存在的 key
redis> MSETNX rmdbs "Sqlite" language "python" # rmdbs 鍵已經存在,操作失敗
(integer) 0
redis> EXISTS language # 因為 MSET 是原子性操作,language 沒有被設定
(integer) 0
redis> GET rmdbs # rmdbs 也沒有被修改
"MySQL"
14、Psetex
Redis Psetex 命令 - 這個命令和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。
用法:Redis Psetex 命令以毫秒為單位設定 key 的生存時間 設定成功的時候返回ok
redis 127.0.0.1:6379> PSETEX key1 EXPIRY_IN_MILLISECONDS value1
示例:
redis 127.0.0.1:6379> PSETEX mykey 1000 "Hello"
OK
redis 127.0.0.1:6379> PTTL mykey
999
redis 127.0.0.1:6379> GET mykey
1) "Hello"
15、Incr
Redis Incr 命令 - 將 key 中儲存的數字值增一
如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 INCR 操作。
如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
用法:
redis 127.0.0.1:6379> INCR KEY_NAME
示例:
redis> SET page_view 20
OK
redis> INCR page_view
(integer) 21
redis> GET page_view # 數字值在 Redis 中以字串的形式儲存
"21"
16、Incrby
Redis Incrby 命令 - 將 key 所儲存的值加上給定的增量值(increment)
Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。
如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 INCRBY 命令。
如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
用法:
redis 127.0.0.1:6379> INCRBY KEY_NAME INCR_AMOUNT
示例:
# key 存在且是數字值
redis> SET rank 50
OK
redis> INCRBY rank 20
(integer) 70
redis> GET rank
"70"
# key 不存在時
redis> EXISTS counter
(integer) 0
redis> INCRBY counter 30
(integer) 30
redis> GET counter
"30"
# key 不是數字值時
redis> SET book "long long ago..."
OK
redis> INCRBY book 200
(error) ERR value is not an integer or out of range
17、Incrbyfloat
Redis Incrbyfloat 命令 - 將 key 所儲存的值加上給定的浮點增量值(increment)
Redis Incrbyfloat 命令為 key 中所儲存的值加上指定的浮點數增量值。
如果 key 不存在,那麼 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。
示例:
# 值和增量都不是指數符號
redis> SET mykey 10.50
OK
redis> INCRBYFLOAT mykey 0.1
"10.6"
# 值和增量都是指數符號
redis> SET mykey 314e-2
OK
redis> GET mykey # 用 SET 設定的值可以是指數符號
"314e-2"
redis> INCRBYFLOAT mykey 0 # 但執行 INCRBYFLOAT 之後格式會被改成非指數符號
"3.14"
# 可以對整數型別執行
redis> SET mykey 3
OK
redis> INCRBYFLOAT mykey 1.1
"4.1"
# 後跟的 0 會被移除
redis> SET mykey 3.0
OK
redis> GET mykey # SET 設定的值小數部分可以是 0
"3.0"
redis> INCRBYFLOAT mykey 1.000000000000000000000 # 但 INCRBYFLOAT 會將無用的 0 忽略掉,有需要的話,將浮點變為整數
"4"
redis> GET mykey
"4"
18、Decr
Redis Decr 命令 - 將 key 中儲存的數字值減一
如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 DECR 操作。
如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
示例:
# 對存在的數字值 key 進行 DECR
redis> SET failure_times 10
OK
redis> DECR failure_times
(integer) 9
# 對不存在的 key 值進行 DECR
redis> EXISTS count
(integer) 0
redis> DECR count
(integer) -1
# 對存在但不是數值的 key 進行 DECR
redis> SET company YOUR_CODE_SUCKS.LLC
OK
redis> DECR company
(error) ERR value is not an integer or out of range
19、Decrby
Redis Decrby 命令 - key 所儲存的值減去給定的減量值(decrement)
說明:
Redis Decrby 命令將 key 所儲存的值減去指定的減量值。
如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 DECRBY 操作。
如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
本操作的值限制在 64 位(bit)有符號數字表示之內。
示例:
# 對已存在的 key 進行 DECRBY
redis> SET count 100
OK
redis> DECRBY count 20
(integer) 80
# 對不存在的 key 進行DECRBY
redis> EXISTS pages
(integer) 0
redis> DECRBY pages 10
(integer) -10
20、Append
Redis Append 命令 - 如果 key 已經存在並且是一個字串, APPEND 命令將 value 追加到 key 原來的值的末尾
Redis Append 命令用於為指定的 key 追加值。
如果 key 已經存在並且是一個字串, APPEND 命令將 value 追加到 key 原來的值的末尾。
如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。
用法:
redis 127.0.0.1:6379> APPEND KEY_NAME NEW_VALUE
示例:
redis> EXISTS myphone # 確保 myphone 不存在
(integer) 0
redis> APPEND myphone "nokia" # 對不存在的 key 進行 APPEND ,等同於 SET myphone "nokia"
(integer) 5 # 字元長度
# 對已存在的字串進行 APPEND
redis> APPEND myphone " - 1110" # 長度從 5 個字元增加到 12 個字元
(integer) 12
redis> GET myphone
"nokia - 1110"
相關文章
- redis原始碼分析(六)、redis命令學習總結—Redis 集合(Set)Redis原始碼
- redis原始碼分析(四)、redis命令學習總結—連結串列ListRedis原始碼
- redis原始碼分析(五)、redis命令學習總結—雜湊HashRedis原始碼
- redis原始碼分析(七)、redis命令學習總結—Redis 有序集合(sorted set)Redis原始碼
- redis原始碼分析(二)、sds動態字串學習總結Redis原始碼字串
- redis原始碼分析(二)、redis原始碼分析之sds字串Redis原始碼字串
- redis原始碼分析(9)redis原始碼連結串列學習總結 adlist.h adlist.cRedis原始碼
- Redis命令String(字串)教程Redis字串
- redis學習總結Redis
- redis string結構及命令詳解【三】Redis
- redis原始碼學習Redis原始碼
- 【原始碼】Redis exists命令bug分析原始碼Redis
- [Redis 系列]redis 學習三,redis 資料結構之 string 和 list 基本使用及熟悉Redis資料結構
- 【Redis 系列】redis 學習三,redis 資料結構之 string 和 list 基本使用及熟悉Redis資料結構
- Redis學習總結1Redis
- redis命令總結Redis
- Redis原始碼閱讀:Redis字串SDSRedis原始碼字串
- 見微知著——Redis字串內部結構原始碼分析Redis字串原始碼
- redis原始碼分析(一)複習redis命令、持久化方案、主從同步原理、配置Redis原始碼持久化主從同步
- redis原始碼分析(一)複習redis命令、持久化方案、主從同步原來、配置Redis原始碼持久化主從同步
- redis學習(三)Redis
- redis命令之-script指令碼學習Redis指令碼
- redis原始碼學習之slowlogRedis原始碼
- Redis 命令練習彙總Redis
- redis原始碼分析-序Redis原始碼
- 【Redis 系列】redis 學習十六,redis 字典(map) 及其核心編碼結構Redis
- Redis的字串型別(String)Redis字串型別
- Redis原始碼學習——基礎資料結構之SDSRedis原始碼資料結構
- Redis | Redis常用命令及示例總結(API)RedisAPI
- redis學習筆記(三)–Redis的功能Redis筆記
- Redis 原始碼學習之事件驅動Redis原始碼事件
- Redis-cli命令最新總結Redis
- Redis資料結構概覽(原始碼分析)Redis資料結構原始碼
- Redis 學習筆記命令Redis筆記
- redis原始碼分析(八)、redis資料結構之壓縮ziplist--------ziplist.c ziplist.h學習筆記Redis原始碼資料結構筆記
- Redis Cluster叢集知識學習總結Redis
- Redis學習總結和相關資料Redis
- redis個人原始碼分析筆記3---redis的事件驅動原始碼分析Redis原始碼筆記事件