簡體   English   中英

在 linux 服務器上使用 redis 連接超時 [tcp://127.0.0.1:6379]

[英]Connection timed out [tcp://127.0.0.1:6379] using redis on linux server

我的服務器中有一個 Lumen API,它運行良好。 實際上,這個 API 將每秒鍾從另一台服務器調用一次並更新庫存率並存儲到 redis 中。 在這個 api 中,我正在比較接收到的數據(請求正文)和來自 redis 的存儲數據,並更新當前值和先前值的差異率作為響應,並且我將在 redis 中發送當前日期時間以顯示股票率的最后更新率. 我的 lumen api 中有以下代碼,

use Illuminate\Support\Facades\Redis;
public function updatebaserate(Request $request)
{
        $request_data = array();
        parse_str($request, $request_data);
        if (app('redis')->get("BaseRates")) {
            if(json_decode(app('redis')->get("BaseRates"),true) === json_decode($request->getContent(), true)){
                $this->createrates();
                return app('redis')->get("BaseRatesUpdated");
            }else{
                $receivedrates = json_decode($request->getContent(), true);
                $rate_valid = true;
                if($rate_valid){
                    app('redis')->set("BaseRatesUpdated", Carbon::createFromFormat('d-m-Y H:i:s', date('d-m-Y H:i:s')));
                    app('redis')->set("BaseRates", $request->getContent());
                }
            }
        } else {
            app('redis')->set("BaseRates", $request->getContent());
            app('redis')->set("BaseRatesUpdated", Carbon::createFromFormat('d-m-Y H:i:s', date('d-m-Y H:i:s')));
        }
        $this->createrates();
        return app('redis')->get("BaseRatesUpdated");
}

每隔 2 個 api 請求就會從另一台服務器調用此 redis 操作的 get 和 set 連續工作。 是否會引起任何問題。 在我的 lumen .env 設置中

BROADCAST_DRIVER=redis

CACHE_DRIVER=redis
QUEUE_DRIVER=redis

REDIS_HOST=127.0.0.1
REDIS_PORT=6379

在顯示以下詳細信息的服務器 redis 信息中,

# Server
redis_version:3.2.10
tcp_port:6379

# Clients
connected_clients:13
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:1802320
used_memory_human:1.72M
used_memory_rss:2387968
used_memory_rss_human:2.28M
used_memory_peak:2200392
used_memory_peak_human:2.10M
total_system_memory:4026261504
total_system_memory_human:3.75G
used_memory_lua:39936
used_memory_lua_human:39.00K
maxmemory:0

# Stats
total_connections_received:302107
total_commands_processed:30017647
instantaneous_ops_per_sec:302
total_net_input_bytes:6532076041
total_net_output_bytes:67794026721
instantaneous_input_kbps:59.68
instantaneous_output_kbps:642.24
rejected_connections:0

每秒在redis中連續讀寫密鑰是否有任何問題。 而且我還設置了redis超時值

127.0.0.1:6379> config get timeout
1) "timeout"
2) "100"

有什么辦法可以在 lumen api 中打開和關閉 redis 的連接。 我經常收到錯誤日志中的錯誤,例如

[2020-03-17 17:17:29] production.ERROR: Predis\Connection\ConnectionException: Connection timed out [tcp://127.0.0.1:6379] in /home/public_html/winapi/vendor/predis/predis/src/Connection/AbstractConnection.php:155
Stack trace:
#0 /home/public_html/winapi/vendor/predis/predis/src/Connection/StreamConnection.php(128): Predis\Connection\AbstractConnection->onConnectionError('Connection time...', 110)
#1 /home/public_html/winapi/vendor/predis/predis/src/Connection/StreamConnection.php(178): Predis\Connection\StreamConnection->createStreamSocket(Object(Predis\Connection\Parameters), 'tcp://127.0.0.1...', 4)
#2 /home/public_html/winapi/vendor/predis/predis/src/Connection/StreamConnection.php(100): Predis\Connection\StreamConnection->tcpStreamInitializer(Object(Predis\Connection\Parameters))

請幫助任何人解決問題。

請嘗試將/etc/redis/redis.conf的 Redis timeout/etc/redis/redis.conf為某個非零值。 這可以解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM