redis#Part07_Node-REDでRedis Stackをアクセスしよう

今回の記事では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

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする