最新版本号[免费下载]

NodeJS连接Redis:安装及开机自动启动设置

作者:本站编辑 发布时间:2015-11-24 来源:本站原创 点击数:

Redis是一个超精简的基于内存的键值对数据库(key-value),官方只提供Linux版本,Windows版本(64位)由微软非官方提供,其编绎后仅有1MB左右。实现非常精简,比如并没有传统数据库中库、表的概念,你并不能设置数据库/表的名字,仅能通过序号选择存放到第几个数据库,仅能通过序号选择存放到第几个数据库,使用<schema:hash>的键值来表示存放到什么表里(如user:001)。不过因为其基于内存且实现简单,Redis有着非常好的性能。

Redis的实现可能比HTML5中内置的离线数据库 IndexedDB 还要简单,一般程序员30分钟即可掌握,某些人希望Web端采用Redis而不是IndexedDB实现Web离线数据库,并例举了几大优点:

  1、简单API:没有复杂的架构迁移,只是一个简单的API,可以用来实现强大的东西。
  2、占地小:相比其它复杂性的实现,Redis的小巧迷死人了。每个浏览器厂商自主实施会非常简单。
  3、能力强:在浏览器中存储层采用SQL有点矫枉过正。同样,文档存储也不错,但是95%的用例也不用着。 Redis的给你一个简单的键值存储,这足以覆盖所有人的需求。

Windows安装

Redis在Windows(64位)上的安装非常简单,到Redis的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


在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) {
 
});



本文责任编辑: 加入会员收藏夹 点此参与评论>>
复制本网址-发给QQ/微信上的朋友
上一篇文章:Node.js 事件循环
AI智能听书
选取音色