58 lines
1.2 KiB
Crystal
58 lines
1.2 KiB
Crystal
require "kemal"
|
|
require "redis"
|
|
|
|
# Initialize Redis client
|
|
REDIS = Redis.new(host: "localhost", port: 6379)
|
|
|
|
# Store a value
|
|
post "/store/:key" do |env|
|
|
key = env.params.url["key"]
|
|
value = env.params.json["value"].as(String)
|
|
|
|
REDIS.set(key, value)
|
|
{message: "Value stored successfully"}.to_json
|
|
end
|
|
|
|
# Retrieve a value
|
|
get "/get/:key" do |env|
|
|
key = env.params.url["key"]
|
|
|
|
if value = REDIS.get(key)
|
|
{key: key, value: value}.to_json
|
|
else
|
|
env.response.status_code = 404
|
|
{message: "Key not found"}.to_json
|
|
end
|
|
end
|
|
|
|
# Delete a value
|
|
delete "/:key" do |env|
|
|
key = env.params.url["key"]
|
|
|
|
if REDIS.del(key) > 0
|
|
{message: "Key deleted successfully"}.to_json
|
|
else
|
|
env.response.status_code = 404
|
|
{message: "Key not found"}.to_json
|
|
end
|
|
end
|
|
|
|
# Increment a counter
|
|
post "/incr/:key" do |env|
|
|
key = env.params.url["key"]
|
|
new_value = REDIS.incr(key)
|
|
|
|
{key: key, value: new_value}.to_json
|
|
end
|
|
|
|
# Store with expiration
|
|
post "/store_temp/:key" do |env|
|
|
key = env.params.url["key"]
|
|
value = env.params.json["value"].as(String)
|
|
ttl = env.params.json["ttl"].as(Int64)
|
|
|
|
REDIS.setex(key, ttl, value)
|
|
{message: "Value stored with expiration"}.to_json
|
|
end
|
|
|
|
Kemal.run
|