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