2018年3月14日 星期三

安裝、簡易設定、常用的基本指令 (Redis 一)

官網好心人翻譯官網的網站

Linux下載與安裝:


$ wget http://download.redis.io/releases/redis-4.0.8.tar.gz
$ tar -zxvf redis-4.0.8.tar.gz
$ cd redis-4.0.8
$ make

# yum install gcc --這行官網沒有,有可能在安裝時會出錯,假設是 gcc 這個程式找不到,可以用類似這樣的方法取得,gcc 是 C 語言的諞譯器

$ make distclean --此行是之前 make 失敗後,再一次 make 有可能會失敗,可加此行再 make
$ make
$ cd src
$ ./redis-server [設定檔路徑,預設為redis目錄下的 redis.conf]
$ ./redis-cli,redis用戶端
出現redis>表示成功

shutdown可關閉redis-server
exit 或 quit 可關閉redis-cli
help 查格式、簡單的說明
  .help 指令名稱,如 help set
  .help @群組名稱,如 help @list
  .打上「help空格」這五個鍵後按 tab,會有 以上兩個用法的提示,先是群組,這個版本有 14個,最後是命令和其他,有214個
ps -e |grep redis 可查看是否啟動



※Windows 下載









懶的進官網,就點我吧!
一樣有以上兩支程式,但設定檔有兩個很像,但我設背景執行都沒用,使用 windows 內鍵的 start redis-server 也只是會多出一個 cmd 而已



※不想裝環境

其實官網有提供,到下載頁的最下方,如下操作



懶的連官網,就點我吧!
可在紅框輸入指令



設定檔:


### GENERAL ###
daemonize 改為 yes 可以在背景執行,改完後,會在/var/run/redis.pid 這個檔案寫 pid
也可用 linux 內鍵的「&」,但不曉得有沒有 pid

logfile 預設沒有寫,所以是空的,加檔案名稱就會將伺服器啟動的資訊寫在裡面,當然還得看層級


dump.rdb

操作的記錄會在這裡,假設在路徑 redis-4.0.8 資料夾執行./src/redis-server,那會存在 redis-4.0.8下;又假設是在 src 資料夾執行 ./redis-server,那會存在 src 下,下次重啟 redis 時,會找當前目錄下的 dump.rdb ,如果沒有,那之前的東西就沒有保存下來了,就會是預設什麼都沒有的情形

在 redis.conf 的 ###SNAPSHOTTING###
預設有三行
save 900 1
save 300 10
save 60 10000
分別表示 900 秒(15分鐘)之內有執行1次操作以上
300秒(5分鐘)之內執行10次操作以上
60秒內執行1萬次操作以上
只要符合這樣的條件,就會自動存檔

在離開時 shutdown 也會存檔
如果在伺服器開啟的狀態下刪這個檔,用戶還是取的到,重啟伺服器才會沒有,但因為離開下 shutdown 會存檔,可以用 shutdown nosave 指令,這樣就沒有了


執行:

到src下,執行 ./redis-server ../redis.conf 啟動伺服器
./redis-cli 啟動用戶端,出現「>」提示符號,表示可以下指令了



常用的基本指令:

clear:清除螢幕
ping:測試有沒有連到伺服器,回傳 PONG
get:取得一個 key
set:設定一個 key
mget:取得多個key
mset:設定多個key
del:刪除某個 key
keys *:列出全部的key,可用「?、*」,如 a*,表示顯示 a 開頭的
dbsize:查詢當前資料庫有幾個 key
select index:選第幾個資料庫,預設是0,預設有16 個資料庫(0~15),在### GENERAL ### 有
    想知道目前第幾個庫,可看「>」前面的方括號,如果沒有方括號就是第 0 號庫
databases 可設定
flushall:清除全部資料庫的 key
flushdb:清除當前資料庫的 key
exists:回傳 1 表示存存;0 不存在
type:回傳值有 6 種,none、string、list、set、zset、hash,數字屬於 string
append:附加到原本的key後面,如果此 key 沒有,那就和 set 一樣
strlen:返回字串長度
getset:在 set 之前會先回傳舊的值,沒有舊值回傳 nil,set 還是會成功
    getset key1 xxx,假設 key1 還沒有創建,那會回傳 nil
    此時 get key1 會回傳 xxx
    getset key1 ooo,回傳 xxx,並塞新值 ooo
    再次 get key1 會回傳 ooo
setrange:將字串的第幾個字取代
    假設 key 的內容為 abcde
    setrange key 2 z
    get key 返回的是 abzde
    setrange key 2 xxx
    get key 返回的是 abxxx,並不會延長,而是將原本的 index 覆蓋
getrange:取得子字串,不會影響原來的字串
shutdown:關閉 redis 伺服器
exit:關閉redis 用戶端


※注意 key 如果已經有了會被覆蓋

※可以設定空格,但必需用成對的「"」或「'」包起來,這兩個符號不會被寫進去,可用 strlen 指令查看,但如果要輸入「"」或「'」,感覺上跳脫字元是「\」,但就是失敗
但使用 java 的 jedis 都可以寫入,但「"」使用 redis 看時是「\"」,長度是 1

中文使用 UTF-8 編碼,中文的一就是 E4B880,每兩個前面會用\x,變成 \xe4\xb8\x80





※加減

加減都只能設定成數字時才能使用
INCR:加 1
INCRBY:INCR只能加 1,這個指令可以加很多,但只能是整數;負數也行,負數變減
INCRBYFLOAT:加減整數、小數都可以
DECR:減1
DECRBY:DECR只能減 1,這個指令可以減很多,但只能是整數;負數也行,負數變加
.沒有DECRBYFLOAT,使用 INCRBYFLOAT 就無敵了



※SET參數

SET 有參數 [EX|PX] [NX|XX]
EX(expire):過了幾秒即失效,也可用 SETEX 指令
PX:過了幾毫秒即失效,也可用 PSETEX 指令
NX(not exist):如果 key 不存在才能設定,也可用 SETNX 指令
XX(exist):如果 key 存在才能設定
.NX 和 XX只能選其一
.官網的 EX 和 PX 沒有說只能選其一,但我試的結果就是會出錯,可能是版本問題吧,這裡是用4.0.8
但 EX 和 PX 可設定多個,結果是後者蓋前者
.沒有SETXX指令
.SETNX、SETEX、PSETEX 這三個命令,因為 SET 能做到相同的功能,所以未來的版本有可能會將其廢棄,最後移除


EXPIRE、PEXPIRE、PERSIST

.假如 SET 時忘記加失效時間,可用這個指令
.EXPIRE 設定的是秒;PEXPIRE 設定的是毫秒
.假設有了失效時間,但想讓它變成永久有效,可用 PERSIST 指令


TTL(time to live)、PTTL

key 的生存時間
.設定了 EX PX,可以使用這個指令看剩多少時間
.如果這個key是無時間限制的(或者說沒設定失效時間),會回傳-1,也就是永不失效
.如果沒有這個key,會回傳-2
.所以假設 set k1 v1 ex 5
get k1,隨著時間減一秒,會出現 5 4 3 2 1 0 -2
而假如有個key已經有了且沒有設定失效時間,那會回傳-1
.TTL回傳秒;PTTL 回傳的是毫秒

沒有留言:

張貼留言