Redis String 类型操作及常用命令
七個原則
String 類型及操作
String 是最簡單的類型,一個 key 對應一個 value。
String 類型是二進制安全的。意思是 redis 的 String 可以包含任何數據, 比如 jpg 圖片或者序列化的對象。 從內部實現來看其實 string 可以看作 byte 數組,最大上限是 1G 字節, 下面是 String 類型的定義:
struct sdshdr {long len;long free;char buf[]; };len 是 buf 數組的長度。
free 是數組中剩余可用字節數, 由此可以理解為什么 string 類型是二進制安全的了, 因為它本質上就是個 byte 數組, 當然可以包含任何數據了。
buf 是個 char 數組用于存貯實際的字符串內容, 其實 char 和 c#中的 byte 是等價的,都是一個字節。
另外 string 類型可以被部分命令按 int 處理.比如 incr 等命令, 如果只用 String 類型, redis 就可以被看作加上持久化特性的 memcached。
常用命令及操作
set
設置 key 對應的值為 string 類型的 value。
例如:我們添加一個 name=Jacob 的鍵值對,可以這樣做:
127.0.0.1:6379> set name Jacob OKsetnx
設置 key 對應的值為 string 類型的 value。 如果 key 已經存在,返回 0, nx 是 not exist 的意思。
例如:我們添加一個 name=Jacob 的鍵值對,可以這樣做:
127.0.0.1:6379> get name "Jacob" 127.0.0.1:6379> setnx name Jacob (integer) 0由于原來 name 有一個對應的值,所以本次的修改不生效,且返回碼是 0。
setex
設置 key 對應的值為 string 類型的 value,并指定此鍵值對應的有效期。
例如:我們添加一個 haircolor= red 的鍵值對,并指定它的有效期是 10 秒,可以這樣做:
可見由于最后一次的調用是 10 秒以后了,所以取不到 haicolor 這個鍵對應的值。
setrange
設置指定 key 的 value 值的子字符串。
例如我們希望將 HongWan 的 126 郵箱替換為 gmail 郵箱,那么我們可以這樣做:
其中的 8 是指從下標為 8(包含 8)的字符開始替換
mset
一次設置多個 key 的值,成功返回 ok 表示所有的值都設置了,失敗返回 0 表示沒有任何值被設置。
127.0.0.1:6379> mset name1 Jacob1 name2 Jacob2 OK 127.0.0.1:6379> get name1 "Jacob1" 127.0.0.1:6379> get name2 "Jacob2"msetnx
一次設置多個 key 的值,成功返回 ok 表示所有的值都設置了,失敗返回 0 表示沒有任何值被設置, 但是不會覆蓋已經存在的 key。
127.0.0.1:6379> get name1 "Jacob1" 127.0.0.1:6379> get name2 "Jacob2" 127.0.0.1:6379> msetnx name2 Jacob2 name3 Jacob3 (integer) 0 127.0.0.1:6379> get name2 "Jacob2" 127.0.0.1:6379> get name3 (nil)可以看出如果這條命令返回 0,那么里面操作都會回滾,都不會被執行。(原子性)
get
獲取 key 對應的 string 值,如果 key 不存在返回 nil。
例如我們獲取一個庫中存在的鍵 name,可以很快得到它對應的 value
nil:表示無此鍵值對。
getset
設置 key 的值,并返回 key 的舊值。 如果 key 不存在,那么將返回 nil。
127.0.0.1:6379> get name "Jacob@jacob.com" 127.0.0.1:6379> getset name Jacob_new "Jacob@jacob.com" 127.0.0.1:6379> get name "Jacob_new" 127.0.0.1:6379> getset name4 Jacob4 (nil)getrange
獲取指定 key 的 value 值的子字符串。
127.0.0.1:6379> get name "Jacob_new" 127.0.0.1:6379> getrange name 0 1 "Ja"字符串左面下標是從 0 開始的。
127.0.0.1:6379> getrange name -3 -1 "new"字符串右面下標是從-1 開始的。
127.0.0.1:6379> getrange name 6 10 "new"當下標超出字符串長度時,將默認為是同方向的最大下標。
mget
一次獲取多個 key 的值,如果對應 key 不存在,則對應返回 nil。
127.0.0.1:6379> mget name name2 name3 1) "Jacob_new" 2) "Jacob2" 3) (nil)name3 由于沒有這個鍵定義,所以返回 nil。
incr
對 key 的值做加加操作,并返回新的值。注意 incr 一個不是 int 的 value 會返回錯誤, incr 一個不存在的 key,則設置 key 為 1
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> incr age (integer) 19incrby
同 incr 類似,加指定值 , key 不存在時候會設置 key,并認為原來的 value 是 0
127.0.0.1:6379> get age "19" 127.0.0.1:6379> incrby age 6 (integer) 25decr
對 key 的值做的是減減操作, decr 一個不存在 key,則設置 key 為-1
127.0.0.1:6379> get age "25" 127.0.0.1:6379> decr age (integer) 24 127.0.0.1:6379> get age "24"decrby
同 decr,減指定值。
127.0.0.1:6379> get age "24" 127.0.0.1:6379> decrby age 6 (integer) 18 127.0.0.1:6379> get age "18"append
給指定 key 的字符串值追加 value,返回新字符串值的長度。
例如:我們向 name 的值追加一個@126.com 字符串,那么可以這樣做:
strlen
取指定 key 的 value 值的長度。
127.0.0.1:6379> get name "Jacob_new@jacob.com" 127.0.0.1:6379> strlen name (integer) 19hashes 類型及操作
總結
以上是生活随笔為你收集整理的Redis String 类型操作及常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(342):进制只能介于2-36
- 下一篇: linux cmake编译源码,linu