使用Node.js + Express服务器将数据发送到Docker (+Docker-Compose) + Redis服务器并进行删除
从Node.js服务器向Docker服务器发送数据。
-
- Ubuntuサーバー環境は2つ使ってます
マシンA
Node.js + Express + express-session + connect-redis + Redis
マシンB
Docker + Docker-Compose + Redis
我想从机器A引用机器B来显示数据,所以采用了这样的配置。
虽然我在各种网站上查看了很多,但是我觉得如果不亲自试一试,就无法理解这个东西。
A机器的准备工作
安装各种软件
假设 Ubuntu 和 Node.js 已经安装。
安装所需的东西。
$ mkdir exp_redis_test
$ cd exp_redis_test
$ npm install --save express \
express-session \
connect-redis \
redis
机器B的准备工作
因为之前已经做过了,所以要使用那个。
保持机器B的Redis运行。
docker-compose up -d --build
在机器A上创建index.js。
创建一个在节点上执行的文件。
尽管混合了var、const和let,但不用担心。
var express = require('express');
var app = express();
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
const REDIS_HOST_NAME = '192.168.123.223';
const REDIS_PORT_NO = 6379;
var redis = require('redis');
let redisClient = redis.createClient(REDIS_PORT_NO, REDIS_HOST_NAME);
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true,
store: new RedisStore({ client: redisClient }), // Redisの設定
cookie: {
path: '/',
maxAge: 5 * 1000,
}
}));
app.get('/', (req, res) => {
// セッションデータが無ければランダム値を取得
var begginer = req.session.value || Math.random();
// valueという名前でセッションデータを生成
req.session.value = begginer;
res.send('Begginer value: ' + begginer);
});
app.get('/session-delete', function(req, res) {
delete req.session.value;
res.send('session variable deleted');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
完成后保存并启动。
$ node index.js
Example app listening on port 3000!

保持这个状态,确认一下B机器。
$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
可以确认数据已经输入。查看内容时,结论如下:
$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"value\":0.016689389693930634}"
127.0.0.1:6379>

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}"
127.0.0.1:6379>
可以确认Value已被删除。
请参照下列内容,用中文进行本地化翻译,只需要提供一种选项:
-
- ざっくり分かるRedis入門
https://qiita.com/t-kuni/items/c00d0994c2eb20681cb1
Node.js + Express 4.xで、セッション管理にRedisを使う
https://s8a.jp/node-js-express-redis
ExpressのSessionデータをRedisで管理する
【入門】Redis
https://qiita.com/wind-up-bird/items/f2d41d08e86789322c71
redis-cli コマンド操作まとめ
https://qiita.com/rubytomato@github/items/d66d932959d596876ab5
Redisのインストール・セットアップ
https://qiita.com/KurosawaTsuyoshi/items/f8719bf7c3a10d22a921
Redisの説明
https://github.com/NodeRedis/node-redis
RedisとElastiCacheを分かりやすくまとめてみた
https://qiita.com/gold-kou/items/966d9a0332f4e110c4f8
システム開発で得たRedis利用ノウハウ
ttps://future-architect.github.io/articles/20190821/
RedisサーバのCPU負荷対策パターン
Commands Introduction
http://redisgate.jp/redis/command/commands.php