Last active
June 28, 2023 08:32
-
-
Save NiDi/ea04b8e847e6641c458a to your computer and use it in GitHub Desktop.
Übersicht der Funktionalitäten von Redis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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