標籤:
redis介紹
redis儲存結構類型:字串類型、散列型、列表型、集合型、有序集合型。
redis記憶體儲存和持久化:redis資料庫中的資料都儲存在記憶體中,記憶體的讀寫速度快於硬碟,因此redis相對於那些將資料存放區在硬碟上資料庫有明顯的優勢。redis可以在一秒鐘內讀寫十萬個索引值。redis提供持久化的支援,將記憶體中的資料非同步寫入到硬碟中,使資料不會丟失,同時不影響業務繼續提供服務。
redis豐富的功能:Redis雖然是作為資料庫開發的,但由於其提供了豐富的功能,越來越多的人將其用作緩衝、隊列系統等。Redis可謂是名副其實的多面手。Redis可以為每個鍵設定存留時間(Time To Live,TTL),存留時間到期後鍵會自動被刪除。這一功能配合出色的效能讓Redis可以作為緩衝系統來使用,而且由於Redis支援持久化和豐富的資料類型,使其成為了另一個非常流行的緩衝系統Memcached的有力競爭者。討論 關於Redis和Memcached優劣的討論一直是一個熱門的話題。在效能上Redis是單執行緒模式,而Memcached支援多線程,所以在多核伺服器上後者的效能更高一些。然而,前面已經介紹過,Redis的效能已經足夠優異,在絕大部分場合下其效能都不會成為瓶頸。所以在使用時更應該關心的是二者在功能上的區別,如果需要用到進階的資料類型或是持久化等功能,Redis將會是Memcached很好的替代品。作為緩衝系統,Redis還可以限定資料佔用的最大記憶體空間,在資料達到空間限制後可以按照一定的規則自動淘汰不需要的鍵。除此之外,Redis的清單類型鍵可以用來實現隊列,並且支援阻塞式讀取,可以很容易地實現一個高效能的優先順序隊列。同時在更高層面上,Redis還支援“發布/訂閱”的訊息模式,可以基於此構建聊天室① 等系統。
系統內容:
[[email protected] ~]# uname -aLinux DBSERVER 2.6.18-274.el5 #1 SMP Fri Jul 8 17:36:59 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux[[email protected] ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 5.7 (Tikanga)
安裝redis:
tar -xf redis-3.0.0.tar.gz cd redis-3.0.0 make make install
編輯redis設定檔redis.conf,添加如下內容:
cp redis.conf /etc/redis.conf
logfile "/var/log/redis.log"port 6380 #預設redis的連接埠為6379pidfile /var/run/redis.pid
啟動redis:
redis-server /etc/redis.conf &
查看進程:
[[email protected] ~]# ps -ef|grep redisroot 6635 3519 0 11:42 pts/0 00:00:00 redis-server *:6380 root 6641 6537 0 11:43 pts/1 00:00:00 redis-cli -p 6380root 6677 3519 0 12:23 pts/0 00:00:00 grep redis
使用redis-cli用戶端串連redis:
[[email protected] ~]# redis-cli -p 6380127.0.0.1:6380> echo hi"hi"127.0.0.1:6380> set foo 1OK127.0.0.1:6380>
關閉redis:
redis-cli -p 6380 shutdown
回複類型
1.狀態回複
狀態回複(status reply)是最簡單的一種回複,比如向Redis發送SET命令設定某個鍵的值時,Redis會回複狀態OK表示設定成功。另外之前示範的對PING命令的回複PONG也是狀態回複。狀態回複直接顯示狀態資訊,例如:
redis>PING
PONG
2.錯誤回複
當出現命令不存在或命令格式有錯誤等情況時Redis會返回錯誤回複(error reply)。錯誤回複以(error)開頭,並在後面跟上錯誤資訊。如執行一個不存在的命令:
redis>ERRORCOMMEND
(error) ERR unknown command ‘ERRORCOMMEND‘
3.整數回複
Redis雖然沒有整數類型,但是卻提供了一些用於整數操作的命令,如遞增索引值的INCR命令會以整數形式返回遞增後的索引值。除此之外,一些其他命令也會返回整數,如可以擷取當前資料庫中鍵的數量的DBSIZE命令等。整數回複(integer reply)以(integer)開頭,並在後面跟上整數資料:
redis>INCR foo
(integer) 1
4.字串回複字串回複(bulk reply)是最常見的一種回複類型,當請求一個字串類型鍵的索引值或一個其他類型鍵中的某個元素時就會得到一個字串回複。字串回複以雙引號包裹:
redis>GET foo
"1"
特殊情況是當請求的索引值不存在時會得到一個空結果,顯示為(nil)。如:
redis>GET noexists
(nil)
5.多行字串回複
多行字串回複(multi-bulk reply)同樣很常見,如當請求一個非字串類型鍵的元素列表時就會收到多行字串回複。多行字串回複中的每行字串都以一個序號開頭,如:
redis> KEYS *
1) "bar"
2) "foo"
命令
1、賦值與取值
set key value
get key
127.0.0.1:6380> set foo 1OK127.0.0.1:6380> get foo"1"127.0.0.1:6380> get name(nil)127.0.0.1:6380>
當鍵不存在時,返回一個空值。
2、遞增數字
INCR key
127.0.0.1:6380> incr num(integer) 1127.0.0.1:6380> incr num(integer) 2127.0.0.1:6380> get num"2"127.0.0.1:6380> set foo cheeronOK127.0.0.1:6380> incr foo(error) ERR value is not an integer or out of range
當操作的鍵不存在時會預設索引值為0,所以第一次遞增為1,當索引值不是整數時,redis會提示錯誤。
3、增加指定的整數
INCRBY key increment
減少指定的整數
DECR key
DECRBY key decrement
127.0.0.1:6380> get num"2"127.0.0.1:6380> incrby num 3(integer) 5127.0.0.1:6380> get num"5"127.0.0.1:6380> decr num(integer) 4127.0.0.1:6380> decrby num 2 (integer) 2127.0.0.1:6380> get num"2"127.0.0.1:6380>
4、增加指定浮點數
INCRBYFLOAT key increment
127.0.0.1:6380> get num"2"127.0.0.1:6380> incrbyfloat num 2.4"4.4"127.0.0.1:6380> get num"4.4"127.0.0.1:6380>
5、向尾部追加值
APPEND key value
擷取字串長度
STRLEN key
127.0.0.1:6380> set key helloOK127.0.0.1:6380> append key world(integer) 10127.0.0.1:6380> get key"helloworld"127.0.0.1:6380> strlen key(integer) 10127.0.0.1:6380> set key 我是青銅OK127.0.0.1:6380> strlen key(integer) 12
當索引值不存在時,返回長度為0,redis接收到的是UTF-8編碼的中文,UTF-8編碼的中文的長度是3
6、同時獲得/設定多個值
MSET key value key value ...
MGET key1 key2 key3
127.0.0.1:6380> mset num1 1 num2 2 num3 3OK127.0.0.1:6380> mget num1 num2 num31) "1"2) "2"3) "3"127.0.0.1:6380>
redis安裝與學習