一、概述
在構建高性能數據庫緩存之redis(一)這篇文檔中,闡述了Redis數據庫(key/value)的特點、功能以及簡單的配置過程,相信閱讀過這篇文檔的朋友,對Redis數據庫會有一點的瞭解,此篇文檔將講解對Redis數據庫的數據類型字符串(String)的操作,當然Redis支持的數據類型不只一種,還有哈希(Hashs)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets),在後續的篇章逐一介紹。
二、字符串(String)
字符串(String)是Redis數據庫中最簡單的類型,一個Key對應一個Value,其上支持的操作與Memcached的操作類似,但Redi的功能比Memcached更豐富,其次String類型是二進制安全的,可以包含任何數據。
三、String命令詳解與示例
SET
功能:設置一個key的value值;
語法:SET Key value
示例:
127.0.0.1:6379>SET mykey "sunnybody" OK 127.0.0.1:6379>GET mykey "sunnybody"
提示:如果設置的可以存在,它將會覆蓋原有的value值,示例如下:
GET
功能:獲取一個key的值
語法:GET Key
示例:
127.0.0.1:6379>SET str "hello world" OK 127.0.0.1:6379>GET str "helloworld"
SETNX
功能:設置key的value值,只有當設置的key存在時,不做任何操作;
語法:SETNX Key value
示例:
127.0.0.1:6379>SETNX id 1005 (integer) 1 127.0.0.1:6379>SETNX id 1006 (integer) 0 127.0.0.1:6379>GET id "1005"
#提示:如上所示,當設置的key存在,輸出數字0;key不存在,輸出數字1;
SETEX
功能:設置key的value值,並設置Key在給定seconds時間之後的過期時間;
語法:SETEX Key seconds value
示例:
127.0.0.1:6379>SETEX name 20 MySQL OK 127.0.0.1:6379>TTL name (integer) 15 127.0.0.1:6379>GET name "MySQL" 127.0.0.1:6379>TTL name (integer) -2 127.0.0.1:6379>GET name (nil)
#提示:我們設置Key的value值會在20秒後過期,可以通過TTL獲取key的有效時間,如果TTL獲取的值爲-2,則標明key已經過期,所以當執行GET操作時,會輸出一個nil值,表示爲空;
SETRANGE
功能:覆蓋key對應value值的一部分,將從指定的offset處開始,覆蓋value的值,並顯示value原始值得長度;
語法:SETRANGE Key offset value
示例:
127.0.0.1:6379>SET email "[email protected]" OK 127.0.0.1:6379>GET email "[email protected]" 127.0.0.1:6379>SETRANGE email 8 sina.com (integer) 17 127.0.0.1:6379>GET email [email protected]
#提示:從示例中可以看出[email protected]字符串的長度爲17,從指定的第8個字符開始將value的值覆蓋sina.com,如果覆蓋的值小於原始的值,將會被保存,所以輸出的結果將爲[email protected];
GETRANGE
功能:返回key對應value值的子串,子串的位置是由start和end決定的;在Redis2.0之前版本命令爲SUBSTR,現替換爲GETRANGE;
語法:GETRANGE Key start end
示例:
127.0.0.1:6379>SET address 'bei jing shi' OK 127.0.0.1:6379>STRLEN address (integer) 12 127.0.0.1:6379>GETRANGE address 0 7 "beijing" 127.0.0.1:6379>GETRANGE address -12 -5 "beijing" 127.0.0.1:6379>GETRANGE address 0 -1 "bei jingshi"
#提示:通過命令STRLEN獲取key對應字符串Value的長度,長度以0開始,-1結束;-1表示字符串Value的最後一個字符,-2爲第二個字符以此類推;
MSET
功能:設置多個KEY的Value值,如果你設置的KEY存在,MSET將會替換原始KEY的Value值;
語法:MSET key value [ key value …………………. ]
示例:
127.0.0.1:6379>SET USER MySQL OK 127.0.0.1:6379>GET USER "MySQL" 127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing" OK 127.0.0.1:6379>GET USER "MariaDB" 127.0.0.1:6379>GET ADDRESS "BeiJing"
#提示:從示例可以看出USER對應Value的值爲MySQL,通過執行MSET的操作,USER的值已被替換爲MariaDB;
MGET
功能:返回所有指定KEY的Value值
語法:MGET Key [ key2 key3 ……… ]
示例:
127.0.0.1:6379>MSET ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing" OK 127.0.0.1:6379>MGET ID USER IPhone ADDRESS CITY 1)"1001" 2)"MariaDB" 3)"18210089932" 4) "BeiJing" 5) (nil)
#提示:KEY的定義具有實際的意義,且每個KEY對應的Value值都不同,如果指定的KEY不存在,輸出信息將返回特殊字符nil,即爲空;
MSETNX
功能:設置多個KEY的Value值,當有一個key已經存在,MSETNX則不會執行此次操作。基於這種特性,MSETNX可以實現要麼所有的操作都成功,要麼一個都不執行,這樣可以用來設置不同的key,來表示一個唯一的對象的不同字段。
語法:MSETNX Key Value [ key2 value key3 value………….. ]
示例:
127.0.0.1:6379>FLUSHALL OK 127.0.0.1:6379>SET USER MariaDB OK 127.0.0.1:6379>MSETNX ID 1001 USER "MariaDB" IPhone 18210089932 ADDRESS "BeiJing" (integer) 0 127.0.0.1:6379>GET ID (nil) 127.0.0.1:6379>MSETNX ID 1001 IPhone 18210089932 ADDRESS "Bei Jing" (integer) 1127.0.0.1:6379>MGET ID IPhone ADDRESS 1)"1001" 2)"18210089932" 3) "BeiJing"
#提示:通過FLUSHALL清除了所有的KEY,從示例中可以看出,當執行MSETNX設置多個KEY的Value值時,只要有一個KEY是存在的,此次操作執行失敗,返回值爲0;否則操作成功,返回值爲1;
GETSET
功能:設置KEY的Value值,且返回舊KEY對應字符串的Value值
語法:GETSET Key Value
示例:
127.0.0.1:6379>SET USER MariaDB OK 127.0.0.1:6379>GETSET USER MySQL "MariaDB" 127.0.0.1:6379>GET USER "MySQL"
#提示:對於GETSET命令,官方的設計模式是結合INCR命令一起使用,實現支持重置的計數功能。舉個例子:每當有事件發生的時候,一段程序都會調用INCR給key mycounter加1,但是有時我們需要獲取計數器的值,並且自動將其重置爲0。這可以通過GETSET mycounter "0"來實現,如下所示:
127.0.0.1:6379>SET mycounter 30 OK 127.0.0.1:6379>INCR mycounter (integer) 31 127.0.0.1:6379>GETSET mycounter 0 "31"
DECR
功能:對Key對應的數字減法操作,每次減1,且Value的值不能是字符串或則超過取值範圍;
語法:DECR Key
示例:
127.0.0.1:6379>SET key1 25 OK 127.0.0.1:6379>DECR key1 (integer) 24 127.0.0.1:6379>DECR key1 (integer) 23 127.0.0.1:6379>GET key1 "23"
INCR
功能:對Key對應的數字做加法操作,每次加1,且Value的值不能是字符串或則超過取值範圍;
語法:INCR key
示例:
127.0.0.1:6379>SET key1 25 OK 127.0.0.1:6379>INCR key1 (integer) 26 127.0.0.1:6379>INCR key1 (integer) 27 127.0.0.1:6379>GET key1 "27"
DECRBY
功能:對Key對應的數字做減法操作,每次減去指定的數字,且Value的值不能是字符串或則超過取值範圍;
語法:DECRBY Key
示例:
127.0.0.1:6379>SET key1 25 OK 127.0.0.1:6379>DECRBY key1 5 (integer) 20 127.0.0.1:6379>DECRBY key1 5 (integer) 15 127.0.0.1:6379>GET key1 "15"
INCRBY
功能:對Key對應的數字做加法操作,每次加上指定的數字,且Value的值不能是字符串或則超過取值範圍;
語法:INCRBY Key
示例:
127.0.0.1:6379>SET key1 25 OK 127.0.0.1:6379>INCRBY key1 5 (integer) 30 127.0.0.1:6379>INCRBY key1 5 (integer) 35 127.0.0.1:6379>GET key1 "35"
STRLEN
功能:返回KEY的value值長度,只用作string類型;
語法:STRLEN Key
示例:
127.0.0.1:6379>SET NAME MariaDB OK 127.0.0.1:6379>STRLEN NAME (integer) 7
APPEND
功能:追加Key對應Value的值,並返回value值的長度;
語法:APPEND Key value
示例:
127.0.0.1:6379>SET Email MariaDB@ OK 127.0.0.1:6379>APPEND Email yahoo.com (integer) 17 127.0.0.1:6379>GET Email "[email protected]" 127.0.0.1:6379>APPEND Qmail [email protected] (integer) 21 127.0.0.1:6379>GET Qmail [email protected]
#提示:如果指定的key
不存在,那麼它將先創建一個空字符串的key,再執行追加操作,這種情況APPEND將類似於SET操作。