iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Software Development

Redis還在學系列 第 12

Day12 Redis應用實戰-String操作

  • 分享至 

  • xImage
  •  

啟動Redis Server

# 複製安裝檔內的redis.conf 到自己指定的路徑下
cp /home/redis/redis-6.2.5/redis.conf /home/redis/config/

# 啟動Redis Server使用自己設定好的config
./redis-server /home/redis/config/redis.conf

# 連線至Redis Server
redis-cli -h 127.0.0.1 -p 6379

# 取得目前載入設定的路徑
127.0.0.1:6379> config get dir

# 取得目前載入設定的內容
127.0.0.1:6379> config get *

# 修改設定值內容
127.0.0.1:6379> config set loglevel warning
127.0.0.1:6379> config get loglevel #驗證

# 顯示Redis Server的資訊和統計資料
127.0.0.1:6379> info server
# info後面server參數可以換成下列這些參數,取得相關資訊與統計資料.
# server clients memory persistence stats replication cpu modules errorstats cluster keyspace

  • Redis 執行操作指令不分大小寫,但如果是Key則有區分大小寫.

  • 也可以透過此環境進行後面的課程
    try redis

Redis 資料型態String

  • Redis中最常使用的型態.

  • 可用指令

    • SET
    • SETNX
    • SETEX
    • SETXX
    • PSETEX
    • GET
    • GETSET
    • STRLEN
    • APPEND
    • SETRANGE
    • GETRANGE
    • INCR
    • INCRBY
    • INCRBYFLOAT
    • DECR
    • DECRBY
    • MSET
    • MSETNX
    • MGET
  • 資料結構

    • value是可以以long型態表示整數值,整數值儲存在字串物件的ptr屬性,並將物件編碼設定為int.
    • value值是字串且長度 < 44 bytes,則將物件使用embstr編碼來儲存.
    • value值是字串且長度 > 44 bytes,則將物件使用SDS以raw編碼來儲存.

SET

設定key與value值.

127.0.0.1:6379> set key1 jacky
OK

127.0.0.1:6379> set key2 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
OK

127.0.0.1:6379> set key3 123
OK

127.0.0.1:6379> set key4 123.456
OK

MSET

一次設定多筆key與value值.

127.0.0.1:6379> mset name1 aaa name2 bbb name3 ccc
OK

GET

取得指定key的value值.

127.0.0.1:6379> get key1
"jacky"
127.0.0.1:6379> object encoding key1
"embstr"

127.0.0.1:6379> get key2
"11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
127.0.0.1:6379> object encoding key2
"raw"

127.0.0.1:6379> get key3
"123"
127.0.0.1:6379> object encoding key3
"int"

127.0.0.1:6379> get key4
"123.456"
127.0.0.1:6379> object encoding key4
"embstr"

MGET

一次取得多個指定key的value值.

127.0.0.1:6379> mget name1 name2 name3
1) "aaa"
2) "bbb"
3) "ccc"

INCR

數值遞增1.

127.0.0.1:6379> get key3
"123"

127.0.0.1:6379> incr key3
(integer) 124

127.0.0.1:6379> get key3
"124"

# 此key5不存在
127.0.0.1:6379> get key5
(nil)

# 此時key會自動寫入1
127.0.0.1:6379> incr key5
(integer) 1

127.0.0.1:6379> get key5
"1"

INCRBY

數值依照設定數值進行遞增.

127.0.0.1:6379> get key5
"1"

# 指定遞增數為10並依此對key的value值進行遞增10
127.0.0.1:6379> incrby key5 10
(integer) 11

127.0.0.1:6379> get key5
"11"

DECR

數值遞減1.

127.0.0.1:6379> get key5
"11"

127.0.0.1:6379> decr key5
(integer) 10

127.0.0.1:6379> get key5
"10"

DECRBY

數值依照設定數值進行遞減.

127.0.0.1:6379> get key5
"10"

# 指定遞減數為3並依此對key的value值進行遞減3
127.0.0.1:6379> decrby key5 3
(integer) 7

127.0.0.1:6379> get key5
"7" 

STRLEN

指定key的value字串長度.

127.0.0.1:6379> get key1
"jacky"

127.0.0.1:6379> strlen key1
(integer) 5

APPEND

指定key的value字串插入字串.

127.0.0.1:6379> get key1
"jacky"

127.0.0.1:6379> append key1 www
(integer) 8

127.0.0.1:6379> get key1
"jackywww"

GETRANGE

指定key取得value中的起始與結束字元.

127.0.0.1:6379> get key1
"jackywww"

127.0.0.1:6379> getrange key1 0 3
"jack"

SETRANGE

指定key取代從指定位置取代value字元.

127.0.0.1:6379> get key1
"jackywww"

127.0.0.1:6379> setrange key1 5 ggg
(integer) 8

127.0.0.1:6379> get key1
"jackyggg"

SETNX

當指定的key不存在時才寫入key與value.

127.0.0.1:6379> set key1 jacky
OK

127.0.0.1:6379> get key1
"jacky"

127.0.0.1:6379> set key1 jacky2
OK

127.0.0.1:6379> get key1
"jacky2"

# 當key1不存在才寫入jacky3到key1的value
127.0.0.1:6379> setnx key1 jacky3
(integer) 0

127.0.0.1:6379> get key1
"jacky2"

127.0.0.1:6379> get key3
(nil)

# 當指定的key存在時才寫入key與value.
127.0.0.1:6379> set key3 abc xx
(nil)

SETEX

設定key過期時間並寫入value,key到期Redis背景會自動刪除.(秒)

127.0.0.1:6379> setex key3 5 www
OK

127.0.0.1:6379> get key3
"www"

127.0.0.1:6379> ttl key3
(integer) 1

127.0.0.1:6379> get key3
(nil)

PSETEX

設定key過期時間並寫入value,key到期Redis背景會自動刪除.(毫秒)

127.0.0.1:6379> get key3
(nil)

127.0.0.1:6379> psetex key3 50000 www
OK

127.0.0.1:6379> get key3
"www"

127.0.0.1:6379> pttl key3
(integer) 43641

127.0.0.1:6379> get key3
(nil)

GETSET

取得目前指定key的值,並寫入新的值.

127.0.0.1:6379> get key4
(nil)

127.0.0.1:6379> getset key4 ccc
(nil)

127.0.0.1:6379> get key4
"ccc"

INCRBYFLOAT

數值依照設定浮點數值進行遞增.

127.0.0.1:6379> get key5
(nil)

127.0.0.1:6379> set key5 123.456
OK

127.0.0.1:6379> incrbyfloat key5 0.001
"123.457"

127.0.0.1:6379> get key5
"123.457"

MSETNX

一次設定多筆的key不存在時才寫入key與value.

127.0.0.1:6379> mget key1 key2
1) (nil)
2) (nil)

127.0.0.1:6379> msetnx key1 jacky key2 123
(integer) 1

127.0.0.1:6379> mget key1 key2
1) "jacky"
2) "123"

127.0.0.1:6379> msetnx key1 boy key2 456
(integer) 0

Redis 進階操作

EXISTS

確認指定key是否存在.

# 存在此key
127.0.0.1:6379> exists key1
(integer) 1

# 存在此2個key
127.0.0.1:6379> exists key1 key2
(integer) 2

# 只存在此2個key,key3不存在
127.0.0.1:6379> exists key1 key2 key3
(integer) 2

EXPIRE

設定key過期時間,key到期Redis背景會自動刪除.(秒)

127.0.0.1:6379> expire key1 3
(integer) 1

# 已刪除
127.0.0.1:6379> get key1
(nil)

# 設定key1值並設定到期時間為2秒 
127.0.0.1:6379> set key1 jacky ex 10
OK

# 剩餘7秒到期
127.0.0.1:6379> ttl key1
(integer) 7

# 到期已刪除
127.0.0.1:6379> get key1
(nil)

PEXPIRE

設定key過期時間,key到期Redis背景會自動刪除.(毫秒)

127.0.0.1:6379> pexpire key2 100
(integer) 1

# 已刪除
127.0.0.1:6379> get key2
(nil)

# 設定key1值並設定到期時間為1000毫秒
127.0.0.1:6379> set key1 jacky px 20000
OK

# 剩餘8666毫秒到期 
127.0.0.1:6379> pttl key1
(integer) 8666

# 到期已刪除
127.0.0.1:6379> get key1
(nil)

DEL

刪除指定key與value,如果大量刪除有可能會讓Redis主thread佔用進而影響操作.

# 刪除5個key成功
127.0.0.1:6379> del key1 key2 key3 key4 key5
(integer) 5

# 沒有刪除任何一個key
127.0.0.1:6379> del key1 key2 key3 key4 key5
(integer) 0

UNLINK

將指定key由keyspace的資料中刪除,但實際資料會由背景執行Process進行刪除,所以大量資料刪除時不會影響Redis主thread操作.

127.0.0.1:6379> unlink name1 name2 name3
(integer) 3

上一篇
Day11 Redis組態檔設定-EVENT NOTIFICATION/GOPHER SERVER/ADVANCED CONFIG/ACTIVE DEFRAGMENTATION
下一篇
Day13 Redis應用實戰-List操作
系列文
Redis還在學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言