引言
最近在學習node.js 連線redis的模組,所以嘗試了一下在虛擬機器中安裝cent OS7,並安裝redis,並使用node.js 操作redis。所以順便做個筆記。
如有不對的地方,歡迎大家指正!
1、cent OS7 下使用redis
1.1、配置編譯環境:
sudo yum install gcc-c++
1.2、下載原始碼:
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
1.3、解壓原始碼:
tar -zxvf redis-4.0.11.tar.gz
1.4、進入到解壓目錄:
cd redis-4.0.11
1.5、進入到解壓目錄: 執行make編譯Redis:
make MALLOC=libc
make命令執行完成編譯後,會在src目錄下生成6個可執行檔案,分別是
- redis-server、
- redis-cli、
- redis-benchmark、
- redis-check-aof、
- redis-check-rdb、
- redis-sentinel
1.6、安裝Redis:
make install
1.7、配置Redis能隨系統啟動:
./utils/install_server.sh
1.8、關閉防火牆
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall開機啟動
firewall-cmd --state #檢視預設防火牆狀態(關閉後顯示notrunning,開啟後顯示running)
2、redis配置
如果redis客戶端和伺服器在同一臺機子中,可以不配置,如果redis伺服器在虛擬機器中,客戶端在本地系統中,則需要進行配置,否則可能會連線失敗
- 關閉保護模式
如果不關閉,通過node.js連線時,會連線失敗
config set protected-mode no
- 設定密碼
// 獲取密碼 config get requirepass // 設定密碼 config set requirepass yourpassword
2.1 、redis.conf 的配置資訊
redis.conf 是redis的的配置檔案,修改配置檔案後,需要重啟redis才會生效
1、daemonize 如果需要在後臺執行,把該項改為yes 2、pidfile 配置多個pid的地址 預設在/var/run/redis.pid 3、bind 繫結ip,設定後只接受來自該ip的請求 4、port 監聽埠,預設是6379 5、loglevel 分為4個等級:debug verbose notice warning 6、logfile 用於配置log檔案地址 7、databases 設定資料庫個數,預設使用的資料庫為0 8、save 設定redis進行資料庫映象的頻率。 9、rdbcompression 在進行映象備份時,是否進行壓縮 10、dbfilename 映象備份檔案的檔名 11、Dir 資料庫映象備份的檔案放置路徑 12、Slaveof 設定資料庫為其他資料庫的從資料庫 13、Masterauth 主資料庫連線需要的密碼驗證 14、Requriepass 設定 登陸時需要使用密碼 15、Maxclients 限制同時使用的客戶數量 16、Maxmemory 設定redis能夠使用的最大記憶體 17、Appendonly 開啟append only模式 18、Appendfsync 設定對appendonly.aof檔案同步的頻率(對資料進行備份的第二種方式) 19、vm-enabled 是否開啟虛擬記憶體支援 (vm開頭的引數都是配置虛擬記憶體的) 20、vm-swap-file 設定虛擬記憶體的交換檔案路徑 21、vm-max-memory 設定redis使用的最大實體記憶體大小 22、vm-page-size 設定虛擬記憶體的頁大小 23、vm-pages 設定交換檔案的總的page數量 24、vm-max-threads 設定VM IO同時使用的執行緒數量 25、Glueoutputbuf 把小的輸出快取存放在一起 26、hash-max-zipmap-entries 設定hash的臨界值 27、Activerehashing 重新hash
3、nodejs中操作redis
3.1、 安裝redis
// github https://github.com/NodeRedis/node_redis
npm install redis --save
3.2、 簡單使用
//引入redis var redis = require(`redis`) // 連線redis伺服器 // 連線redis資料庫,createClient(port,host,options); // 如果REDIS在本機,埠又是預設,直接寫createClient()即可 client = redis.createClient(6379, `192.168.73.128`, { password: `lentoo` }); //錯誤監聽? client.on("error", function (err) { console.log(err); });
client.set(`key`,`value`)
client.get(`key`)
3.3、常用API
-
redis.print
通過redis的列印api回顯
-
set
像redis中存入一個鍵值對
client.set(`key`,`value`) // 設定過期時間 10s後過期 client.set(`key`,`value`,`EX`,10)
-
get
獲取在redis中存入的值
client.get(`key`) // value
-
hset
通過hash key 存值
client.hset(`hash key`,`key`,`value`, redis.print)
-
hget
通過hash key 獲取值
client.hget(`hash key`,`key`, redis.print)
-
hkeys
所有的”hash key”
// 遍歷雜湊表"hash key" client.hkeys("hash key", function (err, replies) { console.log(replies.length + " replies:"); replies.forEach(function (reply, i) { console.log(" " + i + ": " + reply); }); client.quit(); });
-
hmset
可同時設定多個key,value
client.hmset(`hash 1`, `key`, `value111`, `key2`, `value222`, `key3`, `value3`, redis.print)
-
hmget
可同時獲取多個key
client.hmget(`hash 1`, `key`, `key2`, `key3`, redis.print)
-
publish/subscribe
釋出/訂閱
const sub = redis.createClient() // 訂閱者 const pub = redis.createClient() // 釋出者 var msg_count = 0; sub.on("subscribe", function (channel, count) { client.publish("a nice channel", "I am sending a message."); client.publish("a nice channel", "I am sending a second message."); client.publish("a nice channel", "I am sending my last message."); }); sub.on("message", function (channel, message) { console.log("sub channel " + channel + ": " + message); msg_count += 1; if (msg_count === 3) { sub.unsubscribe(); sub.quit(); client.quit(); } });
-
ready
redis客戶端連線準備好後觸發,在此前所有傳送給redis伺服器的命令會以佇列的形式進行排隊,會在ready事件觸發後傳送給redis伺服器
client.on(`ready`,function(){ console.log(`ready`); })
-
connct
客戶端在連線到伺服器後觸發
client.on(`connect`,function(){ console.log(`connect`); })
- reconnecting
客戶端在連線斷開後重新連線伺服器時觸發
client.on(`reconnecting `, function (resc) { console.log(`reconnecting`,resc); })
-
error
錯誤監聽
client.on("error", function (err) { console.log(err); });
-
end
連線斷開時觸發
client.on(`end`,function(){ console.log(`end`) })
-
createClient
建立一個連結
redis.createClient([options])
redis.createClient(unix_socket[, options])
redis.createClient(redis_url[, options])
redis.createClient(port[, host][, options])
3.4 options 物件屬性
屬性 | 預設值 | 描述 |
host | 127.0.0.1 | redis伺服器地址 |
port | 6379 | 埠號 |
connect_timeout | 3600000 | 連線超時時間 以ms為單位 |
password | null | 密碼 |