アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【PostgreSQLRedisDebian
UNIXドメインソケットでPostgreSQL/Redisに接続する
POSTED BY
2023-06-25

ローカルで動くサーバーソフトをローカルから使うならUNIXドメインソケットで接続したほうがTCP接続よりはるかに高速である。
(ただし将来リモート接続になる可能性が高いなら設定が面倒なのでTCPのままのほうがよい)

PostgreSQL

postgresql-server側の設定

postgresql.conf

unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
                                        # (change requires restart)
unix_socket_group = ''                  # (change requires restart)
unix_socket_permissions = 0777          # begin with 0 to use octal notation

再起動

/etc/init.d/postgresql restart

ソケットが居るか確認

netstat -an | grep LISTEN

unix  2      [ ACC ]     STREAM     LISTENING     1555697  /var/run/postgresql/.s.PGSQL.5432

ソケットファイルが作られているので、クライアントから接続可能
unix_socket_permissions = 0777は、誰でも読み書き可=クライアントユーザは問わないパーミッション

https://www.postgresql.jp/document/7.3/programmer/libpq-connect.html

の説明のとおり、hostにはソケットディレクトリ、portにはソケット拡張子を指定して接続する。

#include <postgresql/libpq-fe.h>

PGconn *pgc = PQconnectdb( "host=/var/run/postgresql port=5432 user=hogeuser password=hogepass dbname=testdb" );

Redis

redis-server側の設定

redis.conf

unixsocket /var/run/redis/redis-server.sock
unixsocketperm 777

再起動

/etc/init.d/redis-server restart

ソケットが居るか確認

netstat -an | grep LISTEN

unix  2      [ ACC ]     STREAM     LISTENING     1553190  /var/run/redis/redis-server.sock

ソケットファイルが作られているので、クライアントから接続可能
unixsocketperm 777は、誰でも読み書き可=クライアントユーザは問わないパーミッション

#include <hiredis/hiredis.h>

redisContext *rdc = redisConnectUnix("/var/run/redis/redis-server.sock");

以上です。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】