介紹
- Open source
- Key-Value 儲存型態
- Value 可以是 strings, hashes, lists, sets, ordered sets
- 運作在 memory, 可用 snapshot 儲存在硬碟
- 不支援 2 層以上的 hash
Install
server
brew install redis // Mac
sudo apt-get install redis-server // Ubuntu
Mac 需執行 redis-server
指令才會啟動
client : 只需安裝 redis-tools
sudo apt-get install redis-tools
Command
keys
全部的 key
keys *
Key 的數量
info keyspace
> db0:keys=74415,expires=63940,avg_ttl=306997004
Find prefix string key : ‘queue:’
keys queue:*
刪除 prefix key
redis-cli KEYS "prefix:*" | xargs redis-cli DEL
Count matching keys
redis-cli keys "prefix:*" | wc -l
SET, GET
SET users:test "job: php backend, born: 1989"
GET users:test // "job: php backend, born: 1989"
A String value can be at max 512 Megabytes in length.
hash : 裡面可以有很多 key 跟 value, ex: {name: test}
HSET 'me' 'name' 'test'
HGET 'me' 'name' //得到 test
HDEL 'me' 'name'
HGETALL 'me' //得到所有 key: value
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000
list
LPUSH mylist a
LPUSH mylist b
RPUSH mylist c
LRANGE mylist 0 -1
1) "b"
2) "a"
3) "c"
LPOP mylist // 輸出 b, 剩下 a, c
LBPOP mylist mylist3 mylist3 0 // 非 block 依序彈出 value, 但如果所有的 list 都是空的, 就會 block 直到超時或有 list 被 push 值進來
LLEN mylist // count 裡面的數量
- LRANGE鍵
- 返回列表key中指定區間內的元素,區間以偏移量start和stop指定。
- 下標(index)參數start和stop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。
- 你也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
expired time
EXPIRE key 10 // This key has been set expired time and it'll expire after 10 seconds
Show the rest of expired time
TTL key
- 0 ~ ? => Existed time of seconds.
- -1 => Never expire.
- -2 => Doesn’t exist.
increase
SET mykey "10"
> "OK"
INCR mykey
> (integer) 11
Transactions : MULTI + (一串指令) + EXEC
MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1
查看 Connection list
client list
SETNEX (SET if Not eXists) (如果沒存在, 行為跟 SET 一樣)
SETNX mykey "Hello"
其他指令
Connect to redis server
redis-cli -h xxx-cache.cnhynt.0001.usw2.cache.amazonaws.com -p 6379
可不加 -p
, 預設會使用 6379 port
latency: 跑一個 loop PING
command 100 times per second 來測試, 回應的數字代表是 ms
redis-cli --latency
min: 2, max: 4, avg: 2.78 (98 samples)
ref: https://redis.io/topics/rediscli
benchmark: 它會測試不同項目
redis-benchmark
(...略...)
====== SET ======
10000 requests completed in 0.57 seconds
50 parallel clients
3 bytes payload
keep alive: 1
0.01% <= 2 milliseconds
87.84% <= 3 milliseconds
97.55% <= 4 milliseconds
98.97% <= 5 milliseconds
99.40% <= 6 milliseconds
99.51% <= 14 milliseconds
99.66% <= 15 milliseconds
99.93% <= 16 milliseconds
100.00% <= 16 milliseconds
17543.86 requests per second
(...略...)
Export and Import
Backup to another redis server
Export
$ redis-cli
127.0.0.1:6379> SAVE
OK
Default backup path: /var/lib/redis/dump.rdb
Copy backup(/var/lib/redis/dump.rdb
) to another server
$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb
Import
$ sudo service redis-server stop
$ sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
$ sudo chown redis: /var/lib/redis/dump.rdb
$ sudo service redis-server start
Import mass data
Create import.txt file :
SET job1 "First job"
SET job2 "Second job"
SET job2 "Second job"
要空一格, 不然執行後會有錯誤
import command :
cat import.txt | redis-cli --pipe
(cat import.txt; sleep 10) | nc localhost 6379 > /dev/null
對 lan 開放
/etc/redis/redis.conf :
bind 0.0.0.0
ref :
https://sendgrid.com/blog/get-going-go-redis/
其他
將比對到的 key 做 HGET
redis-cli -h redis.example.ap-northeast-1.local KEYS "user:????????????????????????????????" | xargs -i@ redis-cli -h redis.example.ap-northeast-1.local hget @ name