Skip to content

Instantly share code, notes, and snippets.

@NiDi
Last active June 28, 2023 08:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NiDi/ea04b8e847e6641c458a to your computer and use it in GitHub Desktop.
Save NiDi/ea04b8e847e6641c458a to your computer and use it in GitHub Desktop.
Übersicht der Funktionalitäten von Redis
require "redis"
client = Redis.new
# Basisfunktionen eines Key-Value Stores:
client.set("my_key", "my_value")
=> "OK"
client.get("my_key")
=> "my_value"
client.del("my_key")
=> 1
# Da Redis nur Strings als Value zulässt, müssen Objekte vor der Speicherung serialisiert
# und nach dem Lesen deserialisiert werden.
class User
attr_accessor :name
end
user = User.new
user.name = "Nic"
client.set("User:1", Marshal.dump(user))
=> "OK"
user = Marshal.load client.get("User:1")
=> #<User:0x00000104447c58 @name="Nic">
user.name
=> "Nic"
# Redis bietet auch die Implementierung von atomaren Countern an,
# welche gerade im Analytics-Bereich Anwendung finden können.
client.set("my_counter", 0)
=> "OK"
client.incr("my_counter")
=> 1
client.incrby("my_counter", 7)
=> 8
client.decr("my_counter")
=> 7
# Listen bieten sich u.a. bei der Implementierung von Queues an.
client.lpush "my_list", 1
=> 1
client.lpush "my_list", 2
=> 2
client.lrange "my_list", 0, -1
=> ["2", "1"]
client.rpop "my_list"
=> "1"
# Hashes
client.hset "my_hash", :foo, "bar"
=> true
client.hget "my_hash", :foo
=> "bar"
client.hgetall "my_hash"
=> {"foo"=>"bar"}
# Sets sind eine ungeordnete Collection an Werten.
client.sadd "my_set", "Hello"
=> true
client.sadd "my_set", "World"
=> true
client.smembers "my_set"
=> ["Hello", "World"]
# Publish/Subscribe ist ein Muster, welches in verteilten Messaging-Systemen Anwendung findet.
# Mehrere Empfänger (Subscriber) können ein Thema (Channel) abonnieren und werden benachrichtigt,
# sobald ein Sender (Publisher) eine Nachricht zu diesem Thema veröffentlicht.
# Subscriber Client
client.subscribe(:channel_one) do |on|
on.message do |channel, message|
puts "#{message}"
end
end
# Publisher Client
client.publish :channel_one, "Hello World"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment