Redis - fantasy0107/notes GitHub Wiki

in-memory 的 key-value database,因此常常被用在需要快取(Cache)一些資料的場合

windwows 安裝
redis-command
redis-key-naming-conventions
cheatSheet
資料庫的好夥伴:Redis

CRUD

create

Redis doc - SET

// 新增一筆紀錄 (如果存在會覆蓋)
// command 
SET mykey "Hello" 

HSET mydata name "nick" -  H 就是 Hashmap 的意思,所以你可以存取一個 value 底下的 field (有點像table)

SADD myset "nick" - Set 指的是資料結構學過的那個 Set,裡面不會有重複的內容。 

LPUSH, RPUSH, LSET - 你可以選擇從左邊或是右邊 push 值進去 或者 指定 index 推入
redis> LPUSH mylist "a" // 左邊推入 a
redis> LPUSH mylist "b" // 左邊推入 b
redis> RPUSH mylist "c" // 右邊推入 c
1) "b"
2) "a"
3) "c" 

redis> LSET mylist 0 "d"
redis> LRANGE mylist 0 -1
1) "d"
2) "a"
3) "c"

// php/laravel
Redis::SET('mykey ', "Hello");
Redis::SET('key', 'value', 'EX', 60); - 設定 20 秒 expire
Redis::HSET('mytable', 'id',  10); 



read

// 讀取一筆紀錄
// command 
GET mykey
HGET mydata name - 回傳 "nick" 
SCARD myset  - 取得 set 裡 member 的數量

// php/laravel
Redis::GET('mykey')
Redis::HGET('mytable', 'id')

update

INCR, DECR - 加一或減一
// command
SET mykey "10" 
DECR mykey - 9
INCR mykey - 10

// php/laravel
Redis::SET('mykey', 10);
Redis::DECR('mykey');
Redis::INCR('mykey');


delete

// command
redis> DEL key1 key2 key3
(integer) 2

command

redis-cli info  // 顯示 redis 伺服器資訊

實際應用的場合

key的命名

使用 : 去區分

"object-type:id:field" 
"user:1000:password"
"comment:1234:reply.to" -> 多個字組成時用 .

Redis Doc - Strings


SET key value - 新增 key / 更新
SET key  value - 再重新 set 一次有值的 key 就會更新

INCR mykey - 值 +1
DECR mykey - 值 -1

GET key - 讀取 key

Redis Doc - Sets (S = Set 不會有重複的值)

SADD - Add item
SCARD  - Get size

[Redis Doc - Hashes (H = Hashmap) ] (https://redis.io/commands#hash)

HSET - Set item
HGET - Get item

Redis Doc - Database

DEL key1 key2 key3 - 刪除
KEYS * - 列出所有 key
EXPIRE - 設定 timeout 時間, 時間一到 key 就消失(單位是秒)
TTL - 還有多久會 timeout 

Client­/Server

PING - Test connection
QUIT - Close connection
SELECT - 選擇資料庫 (有 16 個資料庫 ( 0-15 ),預設是第 0 個資料庫) 

概念

當你在儲存資料的時候,你可以新增一個 Expire time 的參數,當這個時間一到之後, 這個 key 就會自動被清除。舉例來說,短網址的 expire 可
以設定成 7 天,當某個網址 7 天內都沒有被任何使用者訪問的話,就會自動被刪除。

這樣的好處是你可以減少記憶體的使用量,只保持某些「熱資料」會存在 Redis,其他比較冷門、 不常被訪問的數據,就存在 Database,等到被訪問的時候再寫到 Redis 即可。

資料庫是用硬碟儲存,Redis 是存在記憶體,以儲存成本來說,資料庫會便宜許多