構建高性能數據庫緩存之redis(二)

一、概述

構建高性能數據庫緩存之redis一)這篇文檔中,闡述了Redis數據庫(key/value)的特點、功能以及簡單的配置過程,相信閱讀過這篇文檔的朋友,對Redis數據庫會有一點的瞭解,此篇文檔將講解對Redis數據庫的數據類型字符串(String)的操作,當然Redis支持的數據類型不只一種,還有哈希(Hashs)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets),在後續的篇章逐一介紹。

 

二、字符串(String

字符串(String)是Redis數據庫中最簡單的類型,一個Key對應一個Value,其上支持的操作與Memcached的操作類似,但Redi的功能比Memcached更豐富,其次String類型是二進制安全的,可以包含任何數據。

 

三、String命令詳解與示例

SET

功能:設置一個keyvalue值;

語法: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

功能:設置keyvalue值,只有當設置的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存在,輸出數字0key不存在,輸出數字1

 

SETEX

功能:設置keyvalue值,並設置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)


#提示:我們設置Keyvalue值會在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值的子串,子串的位置是由startend決定的;在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

功能:設置多個KEYValue值,如果你設置的KEY存在,MSET將會替換原始KEYValue值;

語法: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

功能:返回所有指定KEYValue

語法: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

功能:設置多個KEYValue值,當有一個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設置多個KEYValue值時,只要有一個KEY是存在的,此次操作執行失敗,返回值爲0;否則操作成功,返回值爲1

 

GETSET

功能:設置KEYValue值,且返回舊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命令一起使用,實現支持重置的計數功能。舉個例子:每當有事件發生的時候,一段程序都會調用INCRkey mycounter1,但是有時我們需要獲取計數器的值,並且自動將其重置爲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對應的數字減法操作,每次減1Value的值不能是字符串或則超過取值範圍;

語法: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對應的數字做加法操作,每次加1Value的值不能是字符串或則超過取值範圍;

語法: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

功能:返回KEYvalue值長度,只用作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操作。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章