58
58
import org .springframework .data .redis .core .types .Expiration ;
59
59
import org .springframework .data .redis .core .types .RedisClientInfo ;
60
60
import org .springframework .data .redis .domain .geo .GeoReference ;
61
- import org .springframework .data .redis .domain .geo .GeoReference .GeoMemberReference ;
62
61
import org .springframework .data .redis .domain .geo .GeoShape ;
63
62
import org .springframework .data .redis .serializer .RedisSerializer ;
64
63
import org .springframework .data .redis .serializer .StringRedisSerializer ;
@@ -87,21 +86,19 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco
87
86
88
87
private static final byte [][] EMPTY_2D_BYTE_ARRAY = new byte [0 ][];
89
88
89
+ private boolean deserializePipelineAndTxResults = false ;
90
+
90
91
private final Log log = LogFactory .getLog (DefaultStringRedisConnection .class );
92
+
91
93
private final RedisConnection delegate ;
94
+
92
95
private final RedisSerializer <String > serializer ;
93
- private Converter <byte [], String > bytesToString = new DeserializingConverter ();
94
- private Converter <String , byte []> stringToBytes = new SerializingConverter ();
95
- private final TupleConverter tupleConverter = new TupleConverter ();
96
- private SetConverter <Tuple , StringTuple > tupleToStringTuple = new SetConverter <>(tupleConverter );
97
- private SetConverter <StringTuple , Tuple > stringTupleToTuple = new SetConverter <>(new StringTupleConverter ());
98
- private ListConverter <Tuple , StringTuple > tupleListToStringTuple = new ListConverter <>(new TupleConverter ());
99
- private ListConverter <byte [], String > byteListToStringList = new ListConverter <>(bytesToString );
100
- private MapConverter <byte [], String > byteMapToStringMap = new MapConverter <>(bytesToString );
101
- private MapConverter <String , byte []> stringMapToByteMap = new MapConverter <>(stringToBytes );
102
- private SetConverter <byte [], String > byteSetToStringSet = new SetConverter <>(bytesToString );
103
- private Converter <GeoResults <GeoLocation <byte []>>, GeoResults <GeoLocation <String >>> byteGeoResultsToStringGeoResults ;
104
- private Converter <ByteRecord , StringRecord > byteMapRecordToStringMapRecordConverter = new Converter <ByteRecord , StringRecord >() {
96
+
97
+ private final Converter <byte [], String > bytesToString = new DeserializingConverter ();
98
+
99
+ private final Converter <GeoResults <GeoLocation <byte []>>, GeoResults <GeoLocation <String >>> byteGeoResultsToStringGeoResults ;
100
+
101
+ private final Converter <ByteRecord , StringRecord > byteMapRecordToStringMapRecordConverter = new Converter <>() {
105
102
106
103
@ Nullable
107
104
@ Override
@@ -110,47 +107,55 @@ public StringRecord convert(ByteRecord source) {
110
107
}
111
108
};
112
109
113
- private ListConverter <ByteRecord , StringRecord > listByteMapRecordToStringMapRecordConverter = new ListConverter <>(
114
- byteMapRecordToStringMapRecordConverter );
110
+ private final ListConverter <byte [], String > byteListToStringList = new ListConverter <>(bytesToString );
111
+ private final ListConverter < Tuple , StringTuple > tupleListToStringTuple = new ListConverter <>( new TupleConverter () );
115
112
116
- @ SuppressWarnings ("rawtypes" ) private Queue <Converter > pipelineConverters = new LinkedList <>();
117
- @ SuppressWarnings ("rawtypes" ) private Queue <Converter > txConverters = new LinkedList <>();
118
- private boolean deserializePipelineAndTxResults = false ;
113
+ private final ListConverter <ByteRecord , StringRecord > listByteMapRecordToStringMapRecordConverter =
114
+ new ListConverter <>(byteMapRecordToStringMapRecordConverter );
115
+
116
+ private final MapConverter <byte [], String > byteMapToStringMap = new MapConverter <>(bytesToString );
117
+
118
+ private final TupleConverter tupleConverter = new TupleConverter ();
119
+
120
+ private final SetConverter <byte [], String > byteSetToStringSet = new SetConverter <>(bytesToString );
121
+ private final SetConverter <StringTuple , Tuple > stringTupleToTuple = new SetConverter <>(new StringTupleConverter ());
122
+ private final SetConverter <Tuple , StringTuple > tupleToStringTuple = new SetConverter <>(tupleConverter );
123
+
124
+ @ SuppressWarnings ("rawtypes" )
125
+ private final Queue <Converter > pipelineConverters = new LinkedList <>();
126
+
127
+ @ SuppressWarnings ("rawtypes" )
128
+ private final Queue <Converter > txConverters = new LinkedList <>();
119
129
120
130
private Entry <String , String > convertEntry (Entry <byte [], byte []> source ) {
121
131
return Converters .entryOf (bytesToString .convert (source .getKey ()), bytesToString .convert (source .getValue ()));
122
132
}
123
133
124
134
private class DeserializingConverter implements Converter <byte [], String > {
135
+
125
136
public String convert (byte [] source ) {
126
137
return serializer .deserialize (source );
127
138
}
128
139
}
129
140
130
- private class SerializingConverter implements Converter <String , byte [] > {
141
+ private class StringTupleConverter implements Converter <StringTuple , Tuple > {
131
142
132
- @ Nullable
133
- @ Override
134
- public byte [] convert (String source ) {
135
- return serializer .serialize (source );
143
+ public Tuple convert (StringTuple source ) {
144
+ return new DefaultTuple (source .getValue (), source .getScore ());
136
145
}
137
146
}
138
147
139
148
private class TupleConverter implements Converter <Tuple , StringTuple > {
149
+
140
150
public StringTuple convert (Tuple source ) {
141
151
return new DefaultStringTuple (source , serializer .deserialize (source .getValue ()));
142
152
}
143
153
}
144
154
145
- private class StringTupleConverter implements Converter <StringTuple , Tuple > {
146
- public Tuple convert (StringTuple source ) {
147
- return new DefaultTuple (source .getValue (), source .getScore ());
148
- }
149
- }
150
-
151
155
@ SuppressWarnings ("rawtypes" )
152
156
private class TransactionResultConverter implements Converter <List <Object >, List <Object >> {
153
- private Queue <Converter > txConverters ;
157
+
158
+ private final Queue <Converter > txConverters ;
154
159
155
160
public TransactionResultConverter (Queue <Converter > txConverters ) {
156
161
this .txConverters = txConverters ;
@@ -327,7 +332,6 @@ public byte[] echo(byte[] message) {
327
332
}
328
333
329
334
@ Override
330
- @ SuppressWarnings ("rawtypes" )
331
335
public List <Object > exec () {
332
336
333
337
try {
@@ -1022,7 +1026,7 @@ public Long zDiffStore(byte[] destKey, byte[]... sets) {
1022
1026
@ Nullable
1023
1027
@ Override
1024
1028
public Set <String > zDiff (String ... sets ) {
1025
- return convertAndReturn (delegate .zDiff (serializeMulti (sets )), byteSetToStringSet );
1029
+ return convertAndReturn (delegate .zDiff (serializeMulti (sets )), byteListToStringList );
1026
1030
}
1027
1031
1028
1032
@ Nullable
@@ -1059,7 +1063,7 @@ public Set<Tuple> zInterWithScores(Aggregate aggregate, Weights weights, byte[].
1059
1063
@ Nullable
1060
1064
@ Override
1061
1065
public Set <String > zInter (String ... sets ) {
1062
- return convertAndReturn (delegate .zInter (serializeMulti (sets )), byteSetToStringSet );
1066
+ return convertAndReturn (delegate .zInter (serializeMulti (sets )), byteListToStringList );
1063
1067
}
1064
1068
1065
1069
@ Nullable
@@ -1265,7 +1269,7 @@ public Set<Tuple> zUnionWithScores(Aggregate aggregate, Weights weights, byte[].
1265
1269
@ Nullable
1266
1270
@ Override
1267
1271
public Set <String > zUnion (String ... sets ) {
1268
- return convertAndReturn (delegate .zUnion (serializeMulti (sets )), byteSetToStringSet );
1272
+ return convertAndReturn (delegate .zUnion (serializeMulti (sets )), byteListToStringList );
1269
1273
}
1270
1274
1271
1275
@ Nullable
@@ -1396,11 +1400,11 @@ private org.springframework.data.domain.Range.Bound<byte[]> rawBound(
1396
1400
.orElseGet (org .springframework .data .domain .Range .Bound ::unbounded );
1397
1401
}
1398
1402
1399
- @ SuppressWarnings (" unchecked" )
1403
+ @ SuppressWarnings ({ "rawtypes" , " unchecked" } )
1400
1404
private GeoReference <byte []> serialize (GeoReference <String > data ) {
1401
- return data instanceof GeoReference . GeoMemberReference
1402
- ? GeoReference
1403
- .fromMember (serializer .serialize ((( GeoMemberReference < String >) data ) .getMember ()))
1405
+
1406
+ return data instanceof GeoReference . GeoMemberReference < String > geoMemberReference
1407
+ ? GeoReference .fromMember (serializer .serialize (geoMemberReference .getMember ()))
1404
1408
: (GeoReference ) data ;
1405
1409
}
1406
1410
@@ -2887,12 +2891,14 @@ public List<StringRecord> xRange(String key, org.springframework.data.domain.Ran
2887
2891
}
2888
2892
2889
2893
@ Override
2894
+ @ SuppressWarnings ("unchecked" )
2890
2895
public List <StringRecord > xReadAsString (StreamReadOptions readOptions , StreamOffset <String >... streams ) {
2891
2896
return convertAndReturn (delegate .xRead (readOptions , serialize (streams )),
2892
2897
listByteMapRecordToStringMapRecordConverter );
2893
2898
}
2894
2899
2895
2900
@ Override
2901
+ @ SuppressWarnings ("unchecked" )
2896
2902
public List <StringRecord > xReadGroupAsString (Consumer consumer , StreamReadOptions readOptions ,
2897
2903
StreamOffset <String >... streams ) {
2898
2904
@@ -3000,11 +3006,13 @@ public List<ByteRecord> xRange(byte[] key, org.springframework.data.domain.Range
3000
3006
}
3001
3007
3002
3008
@ Override
3009
+ @ SuppressWarnings ("unchecked" )
3003
3010
public List <ByteRecord > xRead (StreamReadOptions readOptions , StreamOffset <byte []>... streams ) {
3004
3011
return delegate .xRead (readOptions , streams );
3005
3012
}
3006
3013
3007
3014
@ Override
3015
+ @ SuppressWarnings ("unchecked" )
3008
3016
public List <ByteRecord > xReadGroup (Consumer consumer , StreamReadOptions readOptions ,
3009
3017
StreamOffset <byte []>... streams ) {
3010
3018
return delegate .xReadGroup (consumer , readOptions , streams );
@@ -3036,12 +3044,11 @@ public void setDeserializePipelineAndTxResults(boolean deserializePipelineAndTxR
3036
3044
this .deserializePipelineAndTxResults = deserializePipelineAndTxResults ;
3037
3045
}
3038
3046
3039
- @ SuppressWarnings ("unchecked" )
3040
3047
@ Nullable
3048
+ @ SuppressWarnings ({ "rawtypes" , "unchecked" })
3041
3049
private <T > T convertAndReturn (@ Nullable Object value , Converter converter ) {
3042
3050
3043
3051
if (isFutureConversion ()) {
3044
-
3045
3052
addResultConverter (converter );
3046
3053
return null ;
3047
3054
}
@@ -3056,6 +3063,7 @@ private <T> T convertAndReturn(@Nullable Object value, Converter converter) {
3056
3063
}
3057
3064
3058
3065
private void addResultConverter (Converter <?, ?> converter ) {
3066
+
3059
3067
if (isQueueing ()) {
3060
3068
txConverters .add (converter );
3061
3069
} else {
@@ -3069,20 +3077,26 @@ private boolean isFutureConversion() {
3069
3077
3070
3078
@ SuppressWarnings ({ "unchecked" , "rawtypes" })
3071
3079
private List <Object > convertResults (@ Nullable List <Object > results , Queue <Converter > converters ) {
3080
+
3072
3081
if (!deserializePipelineAndTxResults || results == null ) {
3073
3082
return results ;
3074
3083
}
3084
+
3075
3085
if (results .size () != converters .size ()) {
3076
3086
// Some of the commands were done directly on the delegate, don't attempt to convert
3077
3087
log .warn ("Delegate returned an unexpected number of results; Abandoning type conversion." );
3078
3088
return results ;
3079
3089
}
3090
+
3080
3091
List <Object > convertedResults = new ArrayList <>(results .size ());
3092
+
3081
3093
for (Object result : results ) {
3082
3094
3083
3095
Converter converter = converters .remove ();
3096
+
3084
3097
convertedResults .add (result == null ? null : converter .convert (result ));
3085
3098
}
3099
+
3086
3100
return convertedResults ;
3087
3101
}
3088
3102
@@ -3095,9 +3109,11 @@ public List<Long> bitField(byte[] key, BitFieldSubCommands subCommands) {
3095
3109
public List <Long > bitfield (String key , BitFieldSubCommands operation ) {
3096
3110
3097
3111
List <Long > results = delegate .bitField (serialize (key ), operation );
3112
+
3098
3113
if (isFutureConversion ()) {
3099
3114
addResultConverter (Converters .identityConverter ());
3100
3115
}
3116
+
3101
3117
return results ;
3102
3118
}
3103
3119
0 commit comments