@@ -40,24 +40,26 @@ var DefaultStore = NewStore()
4040type HandlerFunc func (args []string ) (string , error )
4141
4242var Commands = map [string ]HandlerFunc {
43- "SET" : setHandler ,
44- "GET" : getHandler ,
45- "DEL" : delHandler ,
46- "EXISTS" : existsHandler ,
47- "LPUSH" : lpushHandler ,
48- "RPUSH" : rpushHandler ,
49- "LPOP" : lpopHandler ,
50- "RPOP" : rpopHandler ,
51- "LRANGE" : lrangeHandler ,
52- "SADD" : saddHandler ,
53- "SREM" : sremHandler ,
54- "SMEMBERS" : smembersHandler ,
55- "KEYS" : keysHandler ,
56- "FLUSHDB" : flushdbHandler ,
57- "INFO" : infoHandler ,
58- "EXPIRE" : expireHandler ,
59- "TTL" : ttlHandler ,
60- "SAVE" : snapshotHandler ,
43+ "SET" : setHandler ,
44+ "GET" : getHandler ,
45+ "DEL" : delHandler ,
46+ "EXISTS" : existsHandler ,
47+ "LPUSH" : lpushHandler ,
48+ "RPUSH" : rpushHandler ,
49+ "LPOP" : lpopHandler ,
50+ "RPOP" : rpopHandler ,
51+ "LRANGE" : lrangeHandler ,
52+ "LGET" : lgetHandler ,
53+ "LLEN" : llengHandler ,
54+ "SADD" : saddHandler ,
55+ "SREM" : sremHandler ,
56+ "SGET" : sgetHandler ,
57+ "KEYS" : keysHandler ,
58+ "FLUSHDB" : flushdbHandler ,
59+ "INFO" : infoHandler ,
60+ "EXPIRE" : expireHandler ,
61+ "TTL" : ttlHandler ,
62+ "SAVE" : snapshotHandler ,
6163}
6264
6365func (s * Store ) ttlCleaner () {
@@ -224,6 +226,34 @@ func lrangeHandler(args []string) (string, error) {
224226 return strings .Join (lst [start :end + 1 ], "," ), nil
225227}
226228
229+ func lgetHandler (args []string ) (string , error ) {
230+ if len (args ) < 1 {
231+ return "" , fmt .Errorf ("missing argument for LGET" )
232+ }
233+ key := args [0 ]
234+ DefaultStore .mu .RLock ()
235+ defer DefaultStore .mu .RUnlock ()
236+ if DefaultStore .types [key ] != ListType {
237+ return "" , nil
238+ }
239+ lst := DefaultStore .data [key ].([]string )
240+ return strings .Join (lst , "," ), nil
241+ }
242+
243+ func llengHandler (args []string ) (string , error ) {
244+ if len (args ) < 1 {
245+ return "" , fmt .Errorf ("missing argument for LLEN" )
246+ }
247+ key := args [0 ]
248+ DefaultStore .mu .RLock ()
249+ defer DefaultStore .mu .RUnlock ()
250+ if DefaultStore .types [key ] != ListType {
251+ return "0" , nil
252+ }
253+ lst := DefaultStore .data [key ].([]string )
254+ return fmt .Sprintf ("%d" , len (lst )), nil
255+ }
256+
227257// Set commands
228258func saddHandler (args []string ) (string , error ) {
229259 if len (args ) < 2 {
@@ -270,9 +300,9 @@ func sremHandler(args []string) (string, error) {
270300 return fmt .Sprintf ("%d" , removed ), nil
271301}
272302
273- func smembersHandler (args []string ) (string , error ) {
303+ func sgetHandler (args []string ) (string , error ) {
274304 if len (args ) < 1 {
275- return "" , fmt .Errorf ("missing argument for SMEMBERS " )
305+ return "" , fmt .Errorf ("missing argument for SGET " )
276306 }
277307 key := args [0 ]
278308 DefaultStore .mu .RLock ()
0 commit comments