今回の記事ではNod-redを使用し、様々なコマンドをLocal/Cloud redis Serverと接続する手順を1から説明します。また、記事の中に使用したのはSeeed Studioのrecomputer r1025-10になります。
さ、FAを楽しもう。
Reference Link
http://soup01.com/ja/category/database/redis/
Install Node
今回Node-redで使用したのはこちらのノードです。
https://flows.nodered.org/node/node-red-contrib-redis
Deploy>Manage paletteをクリックします。
Redis Nodesを検索します。
Nodeをインストールします。
Done!
Add End-point
最初にEnd point(つまりRedis サーバーのURL)を設定します。
こちらはRedis inのノード設定画面です。
+ボタンをクリックし、新たなEnd-Pointを追加します。
こちらはEnd-Pointの設定画面になります。今回の記事ではLocal PCにインストールされたServerとCloudにあるServer両方の追加方法も説明します。
Local
End-PointのURLredis://{IP Address}:{Port}になります。今回Local PCに設置したRedis ServerではPasswordなしなので、End-Point URLはこちらです。
redis://192.168.13.159:6379 |
Cloud
次はCloudのEnd-Pointを設定します。
先ほどLocal Redis Serverの設定Formatはほぼわかりませんが、UsernameとPasswordの追加が必要です。END-POINTのFormatはこちらになります。
redis://[username]:[password]@[yourLink]:[yourport] |
RedisのCloud管理画面からUsernameとPasswordなどの情報を確認しましょう。
下図はRedis Serverに設置したURLとPort番号を確認する方法です。
こちらはUsernameとPasswordと確認する方法です。
なので、最終的にはCloudのRedis ServerのEND-POINTはこちらになります。
redis://default:Somepassword@redis-12051.c56.east-us.azure.redns.redis-cloud.com:12051 |
Implementation
こちらは今回記事で実装したFlowです。
Cloud
基本的にはCloudとLocalでも同じNodeを使えばOkなので、一応CloudにあるRedis Serverを接続してみます。Keyは”Name”で、GETコマンドを使用しKeyの現在値を取得します。
Done!
Redis Insightツールからでも同じ文字列が格納されたことを確認できました。
Local Server
次はLocal Serverのデータにアクセスしていきましょう。
INFO
INFOコマンドを使用し、Redis Serverの情報を取得します。
Timestamp
TimeStamp Nodeを追加しINFO コマンドをトリガーします。
redis INFO
Redis cmd Nodeを追加し、Serverを先程設定したLocalに設定します。
次はCommandを”INFO”に選んでください。
function 10
INFOコマンドから取得できるのは文字列なので、関数を作ってJSON Objectに変換します。
function parseRedisResponse(redisResponse) { const lines = redisResponse.split(‘\n’); const result = {}; let currentCategory = “”; lines.forEach(line => { line = line.trim(); if (!line || line.startsWith(‘*’)) { // Ignore empty lines and lines starting with an asterisk return; } if (line.startsWith(‘#’)) { // This line indicates a new category, so prepare an object for it currentCategory = line.slice(2).toLowerCase(); // Remove “# ” and lowercase the category result[currentCategory] = {}; } else if (currentCategory) { // Split the line into key and value, and add them to the current category in the result const [key, value] = line.split(‘:’); result[currentCategory][key] = isNaN(value) ? value : Number(value); } }); return result; } const redisResponse = msg.payload; const jsonData = parseRedisResponse(redisResponse); msg.payload = jsonData; return msg; |
Result
Done!Redis ServerからServer情報が取得でき、またJSON Objectに変換できました。
Basic Type
今度はRedis Serverにある文字列のKeyのValueを読み書きします。
SET
redis ServerにSETコマンドを発行しデータを保存します。
Inject
Injectを追加し、中のKeyとValue値をredis Server SET Nodeに転送します。
msg.payloadに下記のJson データを設定します。
[“mytime”,”5678″] |
Key=mytime、Value=5678になります。
redis SET
redis Cmd Nodeを追加し、Command=SETに設定します。
Result
Node RedでSETコマンドを発行し、Serverから”OK”の返答がきました。
Redis Insightツールで”mytime”というKeyが追加され、中に5678値が格納されたことが確認できました。
GET
redis ServerにGETコマンドを発行しデータを取得します。
Inject
Injectを追加し、中のKey値をredis Server GET Nodeに転送します。
msg.topicをmytimeに設定しますので、redis ServerにKey ”mytime”の値を取得します。
redis GET
redis Cmd Nodeを追加し、Command=GETに設定します。
Result
Node RedでGETコマンドを発行し、Serverから”OK”の返答がきました。
SET
次はRedis ServerにSETデータ・タイプを読み書きします。
SADD
redis ServerにSADDコマンドを発行しデータを追加します。
Via Function
まず関数からSADDコマンドのNode を設定する方法を紹介します。
Inject
Inject Nodeを追加し、Topic欄は空のままにしてください。
Function
次はFunction Nodeを追加します。
FunctionではPayload配列を作成、Value=[a1、b1]です。またmsg.topicを設定することでKey=data1になります。
msg.payload = [“a1”, “b1”]; msg.topic=”data1″; return msg; |
redis SADD
redis Cmd Nodeを追加し、Command=SADDに設定します。
Result
Node RedでSADDコマンドを発行すると、Serverから2の返答がきました。
Redis Insightツールで”data1”というKeyが追加され、中に[“a1”,”b1”]値が格納されたことが確認できました。
Via payload
次はPayloadからSADDコマンドのNode を設定する方法を紹介します。
Inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではDataのKey=m、Value=[“a”,”b”]になります。
Result
Node RedでSADDコマンドを発行すると、Serverから2の返答がきました。
Redis Insightツールで”m”というKeyが追加され、中に[“a”,”b”]値が格納されたことが確認できました。
MSET
redis ServerにMSETコマンドを発行し複数データをまとめて追加します。
Inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではPayload=[“a”,1,”b”,2]になります。
- Key=a,Value=1
- Key=b,Value=2
redis MSET
redis Cmd Nodeを追加し、Command=MSETに設定します。
Result
Node RedでSADDコマンドを発行すると、Serverから”OK”の返答がきました。
Redis Insightツールで下記のデータが格納されたことが確認できました。
- Key=a,Value=1
- Key=b,Value=2
SREM
redis ServerにSREMコマンドを発行しSETデータ・タイプのデータを削除します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではDataのKey=m、Value=[“b”]を設定することで、Redis Serverのm SETの中にある”b”を削除します。
redis SREM
redis Cmd Nodeを追加し、Command=SREMに設定します。
Result
Node RedでSADDコマンドを発行すると、Serverから1つの返答がきました。
Redis InsightツールでKey=bのデータが削除されたことを確認できました。
SUNION
redis ServerにSUNIONコマンドを発行する前、SADDコマンドでデータを追加します。
SADDコマンドを先に発行し、key=plc、Value=[“beckhoff”,”codesys”,”omron”,”pilz”]のSETデータを追加します。
次はredis ServerにSUNIONコマンドを発行し、ServerのSETデータを取得します。
Inject
Inject Nodeを追加し、msg.Topicをplcに設定すれば、plc SETデータを取得します。
redis SUNION
redis Cmd Nodeを追加し、Command=SUNIONに設定します。
Result
Done!plc SETのKeyとValueを全部取得しました。
SISMEMER
redis ServerにSISMEMERコマンドを発行発行し、該当するSETに特定のKeyあるかをCheckします。
Inject
Inject Nodeを追加と、msg.Topicをplcに設定し、msg.payloadを{“beckhoff”} すれば、plc SET内に”beckhoff”といKeyあるかをCheckできます。
Result
Node RedでSISMEMERコマンドを発行すると、Serverから1つの返答がきましたので、つまり”beckhoff”というKeyは”plc” SETにあります。
inject
今回SETデータにないKeyをmsg.Topicに設定したらどんな結果になるかを確認します。Inject Nodeを追加と、msg.Topicをplcに設定し、msg.payloadを{“keyence”} すれば、plc SET内に”keyence”といKeyあるかをCheckできます。
Result
Node RedでSISMEMERコマンドを発行すると、Serverから0つの返答がきましたので、つまり”keyence”というKeyは”plc” SETにありません。
LIST
今度はRedis ServerにLISTデータ・タイプを読み書きします。
LPUSH
redis ServerにLPUSHコマンドを発行しLISTの一番前にElementを挿入します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=”plclist”、Payload=[“beckhoff”,”codesys”,”omron”,”pilz”,”pilz”,”pilz”,”beckhoff”]になります。
- LIST名=plclist
- Data=[“beckhoff”,”codesys”,”omron”,”pilz”,”pilz”,”pilz”,”beckhoff”]
redis
redis Cmd Nodeを追加し、Command=LPUSHに設定します。
Result
Node RedでLPUSHコマンドを発行すると、Serverから7の返答がきましたので、Serverに”plclist”を7のElementを追加できました。
Done!
RPUSH
redis ServerにRPUSHコマンドを発行しLISTの一番後ろにElementを挿入します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=”plclist”、Payload=[“mels”,”mels”,”salz”]になります。
- LIST名=plclist
- Data=[“mels”,”mels”,”salz”]
redis
redis Cmd Nodeを追加し、Command=RPUSHに設定します。
Result
Node RedでRPUSHコマンドを発行すると、Serverから10の返答がきましたので、Serverに”plclist”を3のElementを追加でき、現在合計10個のElementがあります。
Done!
RPOP
redis ServerにRPOPコマンドを発行しLISTの一番後ろにあるElementを削除します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=”plclist”、Payload={‘2’}
- LIST名=plclist
- 2=一番後ろの2つElementを削除します。
redis
redis Cmd Nodeを追加し、Command=RPOPに設定します。
Result
Node RedでRPOPコマンドを発行すると、Serverから”0:salz,1:mels”の返答がきましたので、Serverに”plclist”に一番後ろの”salz”と”mels”が削除されました。
Done!
LPOP
redis ServerにLPOPコマンドを発行しLISTの一番前にあるElementを削除します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=”plclist”、Payload={‘2’}になります。
- LIST名=plclist
- 2=一番前の2つElementを削除します。
redis
redis Cmd Nodeを追加し、Command=LPOPに設定します。
Result
Node RedでLPOPコマンドを発行すると、Serverから”0:beckhoff,1:pilz”の返答がきましたので、Serverに”plclist”に一番前の”beckhoff”と”pilz”が削除されました。
Done!
LRANGE
redis ServerにLRANGEコマンドを発行しLISTの特定Indexのデータを取得します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=”plclist”、Payload=[“0″,”2”]になります。
- LIST名=plclist
- [“0″,”2”]=Index0から2までのElementを取得します。
redis
redis Cmd Nodeを追加し、Command=LRANGEに設定します。
Result
Node RedでLRANGEコマンドを発行すると、Serverに”plclist”のIndex0からIndex2まで値を取得できます。
HASH
次はRedis ServerにHASHデータ・タイプを読み書きします。
HMSET
redis ServerにHMSETコマンドを発行しHASHデータを作成し、複数のデータをまとめて追加します。
inject
Inject Nodeを追加し、Topicを設定します。下図ではtopic=[“mels”,”Q00″,0,”R00″,2]になります。
- LIST名=”mels”になります。
- データはこちらです。
- “Q00”,0
- “R00”,2
redis
redis Cmd Nodeを追加し、Command=HMSETに設定します。
Result
Node RedでHMSETコマンドを発行すると、Serverに”OK”の返答が来ました。
Redis Insightツールで”mels”というHASHが追加され、中に[“Q00″,0,”R00”,2]値が格納されたことが確認できました。
HMSET2
次はRedis Serverに別の設定でHMSETコマンドを発行する方法を説明します。
inject
Inject Nodeを追加し、msg.payloadとTopicを設定します。下図ではtopic=myHash、palylaod={“a”:1,”b”:2}になります。
- LIST名=”myHash”になります。
- データはこちらです。
- “a”:1
- “b”:2
redis
redis Cmd Nodeを追加し、Commandは空のままに設定します。
Result
Node RedでHMSETコマンドを発行すると、Serverに”OK”の返答が来ました。
Redis Insightツールで”myHash”というHASHが追加され、中に[“a”,1,”b”,2]値が格納されたことが確認できました。
HGET
redis Cmd Nodeを追加し、Command=HGETに設定します。
inject
Inject Nodeを追加し、Topicを設定します。下図ではtopic=[“mels”]、payload=”[“R00”]”になります。
- LIST名=”mels”になります。
- Key “R00″のValueを取得するように設定します。
redis
redis Cmd Nodeを追加し、Command=HGETに設定します。
Result
Node RedでHMSETコマンドを発行すると、Serverに2の返答が来ました。Key R00の値は2であることが確認できました。
HMGET
redis Cmd Nodeを追加し、Command=HMGETに設定します。
inject
Inject Nodeを追加し、Topicを設定します。下図ではtopic=[“mels”]、payload=”[“R00”]”になります。
- LIST名=”mels”になります。
- 複数のKey “Q00″,”R00”,”noInField”のValueを取得するように設定します。
redis
redis Cmd Nodeを追加し、Command=HMGETに設定します。
Result
Node RedでHMSETコマンドを発行すると、Serverに各Keyの値を取得したことが確認できました。また、該当するKeyが存在しない場合は”null”になります。
Pub/Sub
最後はPub/Sub機能を構築します。
inject
Inject Nodeを追加し、Topicを設定します。下図ではpayload={“a”:1,”b”:2}になります。
redis-PUBLISH
redis out Nodeを追加し、Method=PUBLISHに設定します。そしてPublish Nodeの入力Triggerを先程追加したInjectと接続します。
redis-SUBSCRIBE
redis out Nodeを追加し、Method=SUBSCRIBEに設定します。
Result
Done!Publishしたデータを取得できました。
Download
こちらのLinkから記事のFlowをDownloadできます。
https://github.com/soup01Threes/NodeRed/blob/main/RedisAccessExample.json