NodeJS連接Redis:安裝及開機自動啟動設置

jopen 9年前發布 | 37K 次閱讀 Redis NodeJS NoSQL數據庫

簡介

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 6379

bind 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!