redis是什么?与session有什么关系呢?
session的数据是就是的变量,放在nodejs进程中
进程的内存的有限,当访问量过大,session的体量就会变的很大,可能会引起内存的暴增
正式线上运行时多进程,进程之间的数据无法共享:比如,有三个进程都有个session,当我第一次登陆成功的时候命中的是第一个进程,他把我的登录信息放在自己session中去了,第二次登录命中的是第二个进程的话,结果登录失败了。
把session存放到redis就是这个问题的解决方法
原因如下:
session的访问比较频繁,对性能的要求极高
session可不考虑断电丢失的数据问题
session的数据量不会太大
到底什么是redis呢?
web serversion最长远的缓存数据库,但是数据是存放在内存中的,相比于mysql起来,访问速度块,但是成本高,可存的数据量小
一般来说在项目当中既使用redis有需要使用mysql
把web server还有redis拆成两个独立的服务,两者都是可以扩展的
安装
首先下载redis:
我觉得这篇博客写的挺好的:redis安装
项目中进行使用
首先,安装驱动:
npm install redis
redis支持多种数据类型,常用的有键/值对,哈希表,链表,集合等。而且操作上面比较简单
var redis = require('redis')
var client = redis.createClient(6379, '127.0.0.1')
client.on('error', function (err) {
console.log('Error ' + err);
});
// 1 键值对
client.set('color', 'red', redis.print);
client.get('color', function(err, value) {
if (err) throw err;
console.log('Got: ' + value)
client.quit();
})
修改redis的配置文件
linux 中
/etc/redis/redis.conf
大概500行有修改密码的配置 当然,你也可以不修改密码 默认是没有密码的
修改配置后重启 redis
sudo /etc/init.d/redis-server restart
在node中使用redis
var redis = require('redis');
var client = redis.createClient(6379, '127.0.0.1');
client.auth(123456); // 如果没有设置密码 是不需要这一步的
client.on('connect', function () {
// set 语法
client.set('name', 'long', function (err, data) {
console.log(data)
})
// get 语法
client.get('name', function (err, data) {
console.log(data)
})
client.lpush('class',1,function (err,data) {
console.log(data)
})
client.lrange('class',0,-1,function (err,data) {
console.log(data)
})
})
可以用更优雅的结构进行实现:
app.js文件作为一个全局的配置文件,配置以下的文件:
const redisClient = require('./db/redis')
const sessionStore = new redisStore({
client:redisClient
})
根据业务的需求再按需使用