/client-libraries/erlang/src/erldis.erl

http://redis.googlecode.com/ · Erlang · 82 lines · 60 code · 14 blank · 8 comment · 0 complexity · 9721c477abd57f4d1e6bee5c4e51c9f8 MD5 · raw file

  1. -module(erldis).
  2. -compile(export_all).
  3. -define(EOL, "\r\n").
  4. %% helpers
  5. flatten({error, Message}) ->
  6. {error, Message};
  7. flatten(List) when is_list(List)->
  8. lists:flatten(List).
  9. %% exposed API
  10. connect(Host) ->
  11. client:connect(Host).
  12. quit(Client) ->
  13. client:asend(Client, "QUIT"),
  14. client:disconnect(Client).
  15. %% Commands operating on string values
  16. internal_set_like(Client, Command, Key, Value) ->
  17. client:send(Client, Command, [[Key, length(Value)],
  18. [Value]]).
  19. get_all_results(Client) -> client:get_all_results(Client).
  20. set(Client, Key, Value) -> internal_set_like(Client, set, Key, Value).
  21. setnx(Client, Key, Value) -> internal_set_like(Client, setnx, Key, Value).
  22. incr(Client, Key) -> client:ssend(Client, incr, [Key]).
  23. incrby(Client, Key, By) -> client:ssend(Client, incrby, [Key, By]).
  24. decr(Client, Key) -> client:ssend(Client, decr, [Key]).
  25. decrby(Client, Key, By) -> client:ssend(Client, decrby, [Key, By]).
  26. get(Client, Key) -> client:ssend(Client, get, [Key]).
  27. %% Commands operating on every value
  28. exists(Client, Key) -> client:ssend(Client, exists, [Key]).
  29. del(Client, Key) -> client:ssend(Client, del, [Key]).
  30. type(Client, Key) -> client:ssend(Client, type, [Key]).
  31. keys(Client, Pattern) -> client:ssend(Client, keys, [Pattern]).
  32. randomkey(Client, Key) -> client:ssend(Client, randomkey, [Key]).
  33. rename(Client, OldKey, NewKey) -> client:ssend(Client, rename, [OldKey, NewKey]).
  34. renamenx(Client, OldKey, NewKey) -> client:ssend(Client, renamenx, [OldKey, NewKey]).
  35. %% Commands operating on both lists and sets
  36. sort(Client, Key) -> client:ssend(Client, sort, [Key]).
  37. sort(Client, Key, Extra) -> client:ssend(Client, sort, [Key, Extra]).
  38. %% Commands operating on lists
  39. rpush(Client, Key, Value) -> internal_set_like(Client, rpush, Key, Value).
  40. lpush(Client, Key, Value) -> internal_set_like(Client, lpush, Key, Value).
  41. llen(Client, Key) -> client:ssend(Client, llen, [Key]).
  42. lrange(Client, Key, Start, End) -> client:ssend(Client, lrange, [Key, Start, End]).
  43. ltrim(Client, Key, Start, End) -> client:ssend(Client, ltrim, [Key, Start, End]).
  44. lindex(Client, Key, Index) -> client:ssend(Client, lindex, [Key, Index]).
  45. lpop(Client, Key) -> client:ssend(Client, lpop, [Key]).
  46. rpop(Client, Key) -> client:ssend(Client, rpop, [Key]).
  47. lrem(Client, Key, Number, Value) ->
  48. client:send(Client, lrem, [[Key, Number, length(Value)],
  49. [Value]]).
  50. lset(Client, Key, Index, Value) ->
  51. client:send(Client, lset, [[Key, Index, length(Value)],
  52. [Value]]).
  53. %% Commands operating on sets
  54. sadd(Client, Key, Value) -> internal_set_like(Client, sadd, Key, Value).
  55. srem(Client, Key, Value) -> internal_set_like(Client, srem, Key, Value).
  56. scard(Client, Key) -> client:ssend(Client, scard, [Key]).
  57. sismember(Client, Key, Value) -> internal_set_like(Client, sismember, Key, Value).
  58. sintersect(Client, Keys) -> client:ssend(Client, sinter, Keys).
  59. smembers(Client, Key) -> client:ssend(Client, smembers, [Key]).
  60. %% Multiple DB commands
  61. flushdb(Client) -> client:ssend(Client, flushdb).
  62. flushall(Client) -> client:ssend(Client, flushall).
  63. select(Client, Index) -> client:ssend(Client, select, [Index]).
  64. move(Client, Key, DBIndex) -> client:ssend(Client, move, [Key, DBIndex]).
  65. save(Client) -> client:ssend(Client, save).
  66. bgsave(Client) -> client:ssend(Client, bgsave).
  67. lastsave(Client) -> client:ssend(Client, lastsave).
  68. shutdown(Client) -> client:asend(Client, shutdown).