NodeJS連接Redis:安裝及開機自動啟動設置
簡介
Redis是 一個超精簡的基于內存的鍵值對數據庫(key-value),官方只提供Linux版本,Windows版本(64位)由微軟非官方提供,其編繹后僅有 1MB左右。實現非常精簡,比如并沒有傳統數據庫中庫、表的概念,你并不能設置數據庫/表的名字,僅能通過序號選擇存放到第幾個數據庫。因為基于內存且實 現簡單,Redis有著非常好的性能。Redis的實現可能比HTML5中內置的離線數據庫 IndexedDB 還要簡單,一般程序員30分鐘即可掌握,某些人希望Web端采用Redis而不是IndexedDB實現Web離線數據庫,并例舉了幾大優點:
- 簡單API:沒有復雜的架構遷移,只是一個簡單的API,可以用來實現強大的東西。
- 占地小:相比其它復雜性的實現,Redis的小巧迷死人了。每個瀏覽器廠商自主實施會非常簡單。
- 能力強:在瀏覽器中存儲層采用SQL有點矯枉過正。同樣,文檔存儲也不錯,但是95%的用例也不用著。 Redis的給你一個簡單的鍵值存儲,這足以覆蓋所有人的需求。
Windows安裝
Redis在Windows(64位)上的安裝非常簡單,到基Github主頁,點擊"Download Zip"即可,解壓后會有bin\release目前有編繹好的可執行文件。點擊redis-server.exe 即可啟動服務。
Linux(Debian)安裝
在Debian上需要編繹,才能安裝Redis最新版,同樣設置自動開機啟動也需要一些配置,下面的安裝腳本參考這篇文章,并針對最新版作出了修改。
# 安裝編繹時所需的一些工具
sudo apt-get install build-essential
不想每次都輸sudo可使用切換到root用戶
sudo -s
創建一個編繹的目錄
mkdir /opt/redis
cd /opt/redis
下載最新版的壓縮包,若版本有更新可將redis-2.8.18批量改換成最新版的文件名
wget http://download.redis.io/releases/redis-2.8.18.tar.gz
tar -xzf redis-2.8.18.tar.gz
cd redis-2.8.18編繹并安裝
make install
將編繹好的可執行文件放到/opt/redis,debian開機時會尋找這些文件
cp /opt/redis/redis-2.8.18/src/redis-benchmark /opt/redis/
cp /opt/redis/redis-2.8.18/src/redis-cli /opt/redis/
cp /opt/redis/redis-2.8.18/src/redis-server /opt/redis/
cp /opt/redis/redis-2.8.18/src/redis-check-aof /opt/redis/
cp /opt/redis/redis-2.8.18/src/redis-check-dump /opt/redis/
創建一個Redis用戶(與FTP類似,提高安全性,防止其他用戶訪問Redis,查看日志,以及限制Redis本身的活動范圍)
adduser --system --no-create-home --disabled-login --disabled-password --group redis
創建可寫的日志文件(log),將此文件的所有者變更為redis
touch /var/log/redis.log
chown redis:redis /var/log/redis.log
chmod u+w /var/log/redis.log
創建Redis配置文件
這里使用 nano 進行編繹,你也可以使用VIM,安裝: apt-get install nano
mkdir /etc/redis
touch /etc/redis/redis.conf
chown redis:redis -R /etc/redis/
nano /etc/redis/redis.conf
編寫Redis配置,如需密碼保護請設置requirepass,下面是個范例
daemonize yes
pidfile /var/run/redis.pid
logfile /var/log/redis.log
port 6379bind 127.0.0.1
unixsocket /tmp/redis.sock
timeout 300
loglevel verbose
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /var/redis/requirepass foobared
創建一個存放數據庫的地方
mkdir /var/redis
chown redis:redis /var/redis
chmod u+xw /var/redis
創建開機啟動腳本
cd /etc/init.d/
nano redis
腳本內容
! /bin/sh
BEGIN INIT INFO
Provides: redis-server
Required-Start: $syslog
Required-Stop: $syslog
Should-Start: $local_fs
Should-Stop: $local_fs
Default-Start: 2 3 4 5
Default-Stop: 0 1 6
Short-Description: redis-server - Persistent key-value db
Description: redis-server - Persistent key-value db
END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/opt/redis/redis-server
DAEMON_ARGS=/etc/redis/redis.conf
NAME=redis-server
DESC=redis-server
PIDFILE=/var/run/redis.pid
test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
touch $PIDFILE
chown redis:redis $PIDFILE
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS
then
echo "$NAME."
else
echo "failed"
fi
;;
stop)
echo -n "Stopping $DESC: "
if start-stop-daemon --stop --retry 10 --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON
then
echo "$NAME."
else
echo "failed"
fi
rm -f $PIDFILE
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
為Redis添加權限,并設置開始自動運行
chmod u+x redis
update-rc.d -f redis defaults
測試一下
./redis start</blockquote>
在node.js中訪問redis
需要先安裝node_redis模塊
npm install redis
基本用法
var redis = require("redis") , client;client = redis.createClient(6379, '127.0.0.1', {});
// 密碼 client.auth('密碼');
// 選擇數據庫,比如第3個數據庫,默認是第0個 client.select(3, function() { / ... / });
client.on("error", function (err) { console.log("Error " + err); });
// 設置鍵值 client.set("Testing", "string val", redis.print);
// 取值 client.get("Testing", function(err, replies) {
});
// 其它API client.hset("hash key", "hashtest 1", "some value", redis.print); client.hset(["hash key", "hashtest 2", "some other value"], redis.print); client.hkeys("hash key", function (err, replies) { console.log(replies.length + " replies:"); replies.forEach(function (reply, i) { console.log(" " + i + ": " + reply); }); client.quit(); });
// 枚舉趣出數據庫中的所有鍵 client.keys('*', function (err, keys) {
});</pre> 來自:http://ourjs.com/detail/548d14be8a34fa3204000007