Jex’s Note

Redis

介紹

  • 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 *

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:jex "job: php backend, born: 1989"
GET users:jex                                       // "job: php backend, born: 1989"

A String value can be at max 512 Megabytes in length.

hash : 裡面可以有很多 key 跟 value, ex: {name: jex}

HSET 'me' 'name' 'jex'

HGET 'me' 'name'    //得到 jex

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

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

Comments