1- import Sockets. connect, Sockets. TCPSocket, Base. StatusActive, Base. StatusOpen, Base. StatusPaused
2-
31abstract type RedisConnectionBase end
42abstract type SubscribableConnection<: RedisConnectionBase end
53
@@ -8,31 +6,31 @@ struct RedisConnection <: SubscribableConnection
86 port:: Integer
97 password:: AbstractString
108 db:: Integer
11- socket :: TCPSocket
9+ transport :: Transport.RedisTransport
1210end
1311
1412struct SentinelConnection <: SubscribableConnection
1513 host:: AbstractString
1614 port:: Integer
1715 password:: AbstractString
1816 db:: Integer
19- socket :: TCPSocket
17+ transport :: Transport.RedisTransport
2018end
2119
2220struct TransactionConnection <: RedisConnectionBase
2321 host:: AbstractString
2422 port:: Integer
2523 password:: AbstractString
2624 db:: Integer
27- socket :: TCPSocket
25+ transport :: Transport.RedisTransport
2826end
2927
3028mutable struct PipelineConnection <: RedisConnectionBase
3129 host:: AbstractString
3230 port:: Integer
3331 password:: AbstractString
3432 db:: Integer
35- socket :: TCPSocket
33+ transport :: Transport.RedisTransport
3634 num_commands:: Integer
3735end
3836
@@ -43,77 +41,100 @@ struct SubscriptionConnection <: RedisConnectionBase
4341 db:: Integer
4442 callbacks:: Dict{AbstractString, Function}
4543 pcallbacks:: Dict{AbstractString, Function}
46- socket :: TCPSocket
44+ transport :: Transport.RedisTransport
4745end
4846
49- function RedisConnection (; host= " 127.0.0.1" , port= 6379 , password= " " , db= 0 )
47+ Transport. get_sslconfig (s:: RedisConnectionBase ) = Transport. get_sslconfig (s. transport)
48+
49+ function RedisConnection (; host= " 127.0.0.1" , port= 6379 , password= " " , db= 0 , sslconfig= nothing )
5050 try
51- socket = connect (host, port)
52- connection = RedisConnection (host, port, password, db, socket)
51+ connection = RedisConnection (
52+ host,
53+ port,
54+ password,
55+ db,
56+ Transport. transport (host, port, sslconfig)
57+ )
5358 on_connect (connection)
5459 catch
5560 throw (ConnectionException (" Failed to connect to Redis server" ))
5661 end
5762end
5863
59- function SentinelConnection (; host= " 127.0.0.1" , port= 26379 , password= " " , db= 0 )
64+ function SentinelConnection (; host= " 127.0.0.1" , port= 26379 , password= " " , db= 0 , sslconfig = nothing )
6065 try
61- socket = connect (host, port)
62- sentinel_connection = SentinelConnection (host, port, password, db, socket)
66+ sentinel_connection = SentinelConnection (
67+ host,
68+ port,
69+ password,
70+ db,
71+ Transport. transport (host, port, sslconfig)
72+ )
6373 on_connect (sentinel_connection)
6474 catch
6575 throw (ConnectionException (" Failed to connect to Redis sentinel" ))
6676 end
6777end
6878
69- function TransactionConnection (parent:: RedisConnection )
79+ function TransactionConnection (parent:: RedisConnection ; sslconfig = Transport . get_sslconfig (parent) )
7080 try
71- socket = connect (parent. host, parent. port)
72- transaction_connection = TransactionConnection (parent. host,
73- parent. port, parent. password, parent. db, socket)
81+ transaction_connection = TransactionConnection (
82+ parent. host,
83+ parent. port,
84+ parent. password,
85+ parent. db,
86+ Transport. transport (parent. host, parent. port, sslconfig)
87+ )
7488 on_connect (transaction_connection)
7589 catch
7690 throw (ConnectionException (" Failed to create transaction" ))
7791 end
7892end
7993
80- function PipelineConnection (parent:: RedisConnection )
94+ function PipelineConnection (parent:: RedisConnection ; sslconfig = Transport . get_sslconfig (parent) )
8195 try
82- socket = connect (parent. host, parent. port)
83- pipeline_connection = PipelineConnection (parent. host,
84- parent. port, parent. password, parent. db, socket, 0 )
96+ pipeline_connection = PipelineConnection (
97+ parent. host,
98+ parent. port,
99+ parent. password,
100+ parent. db,
101+ Transport. transport (parent. host, parent. port, sslconfig),
102+ 0
103+ )
85104 on_connect (pipeline_connection)
86105 catch
87106 throw (ConnectionException (" Failed to create pipeline" ))
88107 end
89108end
90109
91- function SubscriptionConnection (parent:: SubscribableConnection )
110+ function SubscriptionConnection (parent:: SubscribableConnection ; sslconfig = Transport . get_sslconfig (parent) )
92111 try
93- socket = connect (parent. host, parent. port)
94- subscription_connection = SubscriptionConnection (parent. host,
95- parent. port, parent. password, parent. db, Dict {AbstractString, Function} (),
96- Dict {AbstractString, Function} (), socket)
112+ subscription_connection = SubscriptionConnection (
113+ parent. host,
114+ parent. port,
115+ parent. password,
116+ parent. db,
117+ Dict {AbstractString, Function} (),
118+ Dict {AbstractString, Function} (),
119+ Transport. transport (parent. host, parent. port, sslconfig)
120+ )
97121 on_connect (subscription_connection)
98122 catch
99123 throw (ConnectionException (" Failed to create subscription" ))
100124 end
101125end
102126
103127function on_connect (conn:: RedisConnectionBase )
104- # disable nagle and enable quickack to speed up the usually small exchanges
105- Sockets. nagle (conn. socket, false )
106- Sockets. quickack (conn. socket, true )
107-
128+ Transport. set_props! (conn. transport)
108129 conn. password != " " && auth (conn, conn. password)
109130 conn. db != 0 && select (conn, conn. db)
110131 conn
111132end
112133
113134function disconnect (conn:: RedisConnectionBase )
114- close (conn. socket )
135+ Transport . close (conn. transport )
115136end
116137
117138function is_connected (conn:: RedisConnectionBase )
118- conn . socket . status == StatusActive || conn. socket . status == StatusOpen || conn . socket . status == StatusPaused
139+ Transport . is_connected ( conn. transport)
119140end
0 commit comments