2023-07-28

#redis#database#backend

Redis的學習筆記

在Ubuntu安裝

首先更新系統
sudo apt update

再執行安裝

sudo apt install redis

啟動 redis-server

sudo service redis-server start

進入redis

$ redis-cli

啟動redis伺服器,在背景執行

$ redis-server

出現PONG,啟動成功

127.0.0.1:6379> ping
PONG

離開

127.0.0.1:6379>exit

進入root權限

sudo su

cd /etc/redis 在底下會出現redis的設定檔

nano redis.conf

開機自動啟動,預設為no,可以改為auto

supervised auto

在MacOS安裝

brew install reids
brew services start redis

redis預設有16個資料庫,編號為0-15,且默認訪問為0號資料庫,下面是切換方法

select 資料庫編號
127.0.0.1:6379> select 15
OK
127.0.0.1:6379[15]> select 0
OK
dbsize 獲取目前資料庫key值數量
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> dbsize
(integer) 1
flushdb 清空目前的資料庫
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> dbsize
(integer) 0
save 將資料存到磁碟區
bgsave 將資料異步存到碟碟區(背景執行: Background),每2秒自動儲存
lastsave 獲取最後一次成功儲存的unix時間
127.0.0.1:6379> lastsave
(integer) 1690384997

批量增加資料,mset key value key1 value1 key2 value2...etc

127.0.0.1:6379> mset k1 v1 k2 v2 a1 av1 a2 av2
OK
127.0.0.1:6379> dbsize
(integer) 4

顯示所有key

127.0.0.1:6379> keys *
1) "a1"
2) "a2"
3) "k2"
4) "k1"

顯示k的所有相關的key

127.0.0.1:6379> keys k*
1) "k2"
2) "k1"

檢查key是否存在
二個都在存在,所以返回2

127.0.0.1:6379> exists k2 k1
(integer) 2

只有k1存在,所以只返回1

127.0.0.1:6379> exists k1 a3 a5
(integer) 1

查看key的type

127.0.0.1:6379> type k1
string

刪除資料,如果key不存在,只會刪除在資料庫裡面的

127.0.0.1:6379> del a2 a3
(integer) 1

修改key的名稱

127.0.0.1:6379> rename k1 apple
OK
127.0.0.1:6379> keys *
1) "a1"
2) "apple"
3) "k2"

取得key值

127.0.0.1:6379> get apple
"v1"

當只有k3不存在資料庫時,才可重新修改名稱

127.0.0.1:6379> renamenx apple k3
(integer) 1
127.0.0.1:6379> keys *
1) "a1"
2) "k2"
3) "k3"

返回0表示k2存在資料庫中,修改失敗

127.0.0.1:6379> renamenx k3 k2
(integer) 0

移動資料到別的資料庫
下面的範例,可以看到k3被成功移到3號資料庫裡面了

127.0.0.1:6379> move k3 3
(integer) 1
127.0.0.1:6379> keys *
1) "a1"
2) "k2"
127.0.0.1:6379> select 3
OK
127.0.0.1:6379[3]> keys *
1) "k3"
// 重新返回到0號資料庫
127.0.0.1:6379[3]> select 0
OK

拷貝資料給新的key,如果是存在的key,則拷貝失敗

127.0.0.1:6379> copy a1 k2
(integer) 0
127.0.0.1:6379> get k2
"v2"
127.0.0.1:6379> copy a1 a2
(integer) 1
127.0.0.1:6379> get a2
"av1"

新增/修改key鍵值
set key value

127.0.0.1:6379> set k2 aaa
OK

取得key值
get key

127.0.0.1:6379> get k2
"aaa"

新增多個key和value

mset key1 value1 [key2 value2...]

取得多個key值

mget key1 [key2 ...]

增加key值的內容
append key value

127.0.0.1:6379> append a1 ccddeeff
(integer) 11
127.0.0.1:6379> get a1
"av1ccddeeff"

取得key值的字串長度

127.0.0.1:6379> strlen k2
(integer) 3

取得字串的從起始位子到結尾位子的所有值 getrange key startindex endindex

127.0.0.1:6379> getrange a1  8 10
"eff"

只有key不存在時,才能夠新增資料

set key value nx
setnx key value

出現nil表示新增失敗

127.0.0.1:6379> set a1 aaa nx
(nil)

修改已存在的key值,不存在的key會返回nil
set key value xx

127.0.0.1:6379> set a2 123435 xx
OK
127.0.0.1:6379> get a2
"123435"
127.0.0.1:6379> set n1 12345 xx
(nil)

批量新增key值

msetnx key1 value1 [key2 value2 ...]

key值加1,可以看到123變成124
incr key

127.0.0.1:6379> set n1 123
OK
127.0.0.1:6379> incr n1
(integer) 124
127.0.0.1:6379> get n1
"124"

incrby key value

127.0.0.1:6379> incrby n1 100
(integer) 224

decr key
decrby key value

127.0.0.1:6379> decrby n1 50
(integer) 174
127.0.0.1:6379> decr n1
(integer) 173

設定到期時間,時間到後,key直接被刪除
expire key 秒

顯示剩餘時間,找不到key返回-2
ttl key

127.0.0.1:6379> expire n1 10
(integer) 1
127.0.0.1:6379> ttl n1
(integer) 7
127.0.0.1:6379> ttl n1
(integer) -2
127.0.0.1:6379> get n1
(nil)

pexpire key 毫秒 毫秒版expire
pttl key 毫秒版ttl
persist key 取消到期時間

2種寫法,都是一樣的設定
set key value ex 秒
setex key ex value

2種寫法,都是一樣的設定
set key value px 毫秒

psetex key ms value
set key value exat unit秒 設定unix秒的到期時間
set key value pxat unix毫秒 設定unix毫秒的到期時間
set key value keepttl 設時不重置ttl

下面的範例,表示k1在新增的時候,就不可以修改到期時間,-1表永久存在

127.0.0.1:6379> set k1 v1 keepttl
OK
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> set k1 v1 ex 20
OK
127.0.0.1:6379> set k1 v2
OK
127.0.0.1:6379> ttl k1
(integer) -1
127.0.0.1:6379> get k1
"v2"