iT邦幫忙

DAY 12
2

建立API為中心的輕量級網站系列 第 12

基本的 redis 操作與 Strings Lists Hashes資料型態

概念非常簡單的 redis,
操作上非常簡單,
了解基本的操作,
再依各巧思利用 redis 所提供的機制。
為何叫 redis?
是因為 REmote DIctionary Server,
字典式即是以 key value 型態來存取資料,

目前各Linux都已有redis的現成套件,
安裝完後,啟動 redis 的 server 端,
然後從 CLI 執行 redis-cli 的 client 使用。

或者也可以到 Try Redis
從線上體驗操作redis。
該網站提供了個簡單的線上教學,
鍵入 TUTORIAL,
便可依指示操作而認識 redis。

基本的操作

$ redis-cli
#列出現有所有的 key
redis 127.0.0.1:6379> keys *
(empty list or set)
#設個key value 及查詢
redis 127.0.0.1:6379> set os linux
OK
redis 127.0.0.1:6379> get os
"linux"
redis 127.0.0.1:6379> keys *
1) "os"
#切換到不同的資料庫以select執行,預設是使用0
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> keys *
(empty list or set)
redis 127.0.0.1:6379[1]> select 0
OK
redis 127.0.0.1:6379> keys *
1) "os"
#刪除指定的 key
redis 127.0.0.1:6379> del os
(integer) 1

常用的基本資料型態
基本來說,redis就只是 redis['key'] = 'value' 這樣的型態而已,
而value 的資料型態可以是:Strings(Integers), Lists, Hashes, Sets, Sorted Sets
就這麼簡單的概念,
分別就怎麼用這些資料型態來操作。

Strings(Integers)
假設每點閱文章一次就累加次數

redis 127.0.0.1:6379> incr hit:player:twtw
(integer) 1
#如果指定一次累加多少可用 incrby
redis 127.0.0.1:6379> incrby hit:player:twtw 5
(integer) 6
#遞減用 decr 及相對應的 decrby
redis 127.0.0.1:6379> decr hit:player:twtw
(integer) 5
redis 127.0.0.1:6379> decrby hit:player:twtw 2
(integer) 3
#查詢某key的值
redis 127.0.0.1:6379> get hit:player:twtw
"3"
#key不存在則為nil或-1
redis 127.0.0.1:6379> get hit:player:none
(nil)

Lists
有順序的列表,
假設給twtw訊息的編號,
最新的排在最前面:

redis 127.0.0.1:6379> lpush msg:twtw 100
(integer) 5
#列出所有訊息編號:
redis 127.0.0.1:6379> lrange msg:twtw 0 -1
1) "100"
2) "55"
3) "33"
4) "4"
5) "2"
#如果只保留前三個訊息
redis 127.0.0.1:6379> ltrim msg:twtw 0 2
OK
redis 127.0.0.1:6379> lrange msg:twtw 0 -1
1) "100"
2) "55"
3) "33"
#若要刪掉倒數第一個55的訊息
redis 127.0.0.1:6379> lrem msg:twtw -1 55
(integer) 1
redis 127.0.0.1:6379> lrange msg:twtw 0 -1
1) "100"
2) "33"
#從左邊pop出第一個
redis 127.0.0.1:6379> lpop msg:twtw
"100"
redis 127.0.0.1:6379> lrange msg:twtw 0 -1
1) "33"

Hashes

#同時設好幾個key value用hmset
redis 127.0.0.1:6379> hmset player:twtw type tech subject "建立API為中心的輕量級網站"
OK
#一次抓所有的值
redis 127.0.0.1:6379> hgetall player:twtw
1) "type"
2) "tech"
3) "subject"
4) "\xe5\xbb\xba\xe7\xab\x8bAPI\xe7\x82\xba\xe4\xb8\xad\xe5\xbf\x83\xe7\x9a\x84\xe8\xbc\x95\xe9\x87\x8f\xe7\xb4\x9a\xe7\xb6\xb2\xe7\xab\x99"
#一次只加一個key value用 hset
redis 127.0.0.1:6379> hset player:twtw created_at "2012-10-09 23:34:26"
(integer) 1
#一次抓一個key值
redis 127.0.0.1:6379> hget player:twtw type
"tech"

系列文章列表


上一篇
什麼情況可考慮用 NoSQL?
下一篇
redis 的 Sets, Sorted Sets 資料型態與有時效的key
系列文
建立API為中心的輕量級網站30

尚未有邦友留言

立即登入留言